2012-01-09 10 views
1

空白を忘れずにファイルから文字を読み取る方法はありますか?
私は、これに含まれるファイルを持っています:
怠惰な犬の上にクイックブラウンキツが飛びます。
ファイル(文字)から読み込むと、スペースはなくなりますが、他の文字はすべて正しく読み込まれます。どうして?
これはコードの例である:私は配列を印刷するとき
ファイルからのストリーム<fstream>

unsigned int cap = (unsigned)strlen("The quick brown fox jumps over the lazy dog."); 
char c[cap]; 
int i = 0; 
while (!fIn.eof()) { 
    fIn >> c[i]; 
    ++i; 
} 

for (int i = 0; i < cap; i++) 
    cout << c[i]; 

、すべてのスペースが不足しています。どのようにしてこの問題を回避できるのか教えてください。

答えて

3

iomanip <からのstd :: noskipwsを使用して、それをオフにすることができます。

std::noskipwsは、ストリーム抽出演算子に空白をスキップしないように指示します。

#include <iostream> 
#include <iomanip> 
#include <fstream> 
#include <algorithm> 

int main() 
{ 
    std::ifstream ifs("x.txt"); 

    ifs >> std::noskipws; 

    std::copy(std::istream_iterator<char>(ifs), 
       std::istream_iterator<char>(), 
       std::ostream_iterator<char>(std::cout)); 
} 

他のオプションは、生の入力機能fstream::get()fstream::read()を使用することです。

2

は "取得" メソッドを使用します。

ifstream in("try.in"); 
char c; 
while((c = in.get()) && in) { 
    cout << c; 
} 
+0

どのヘッダにget()が定義されていますか? – Overflowh

+1

この用途では、fstreamとiostreamの両方が必要です。 –

+0

'(c = in.get())'は実際にcを次の文字と等しく設定します。私が理解していることから、whileループでは、別の文字があるかどうかを確認するだけです。あなたはそれを説明できますか? – Omar

1

デフォルトではistreamはskipws(空白をスキップ)フラグが設定されています。これは読み込み時に先行する空白をスキップします。

はあなたが<iomanip>で宣言されたストリームマニピュレータを使用することができます>

fIn << std::noskipws; 
while (!fIn.eof()) { 
    // etc. 
} 
関連する問題