1

C++ で .txt ファイルからいくつかの情報を読み込もうとしましたが、すべてが期待どおりに機能しているわけではありません。コード例を次に示します。

#include <iostream>
#include <fstream>

using namespace std;

int main()
{
    char words[255];
    int value = 0;

    ifstream input_stream("test.txt");

    input_stream >> value;
    input_stream.getline(words, 256);

    cout << value << endl;
    cout << words << endl;
}

また、test.txt には以下が含まれます。

1234
WordOne WordTwo

私が期待しているのは、コードがテキスト ファイルに含まれる 2 行を出力することですが、代わりに次のようになります。

 1234

getline と istream について読んでいますが、解決策が見つからないようですので、助けていただければ幸いです。

ありがとう

4

4 に答える 4

3

改行文字は、整数の読み取り後に入力ストリームに残ります。

// Always check result to ensure variables correctly assigned a value.
if (input_stream >> value)
{
}

次に、 への呼び出しがgetline()改行文字を読み取って停止し、空の文字列が生成されます。修正するには、呼び出す前に改行文字を消費しますgetline()(オプションには、getline()またはの使用が含まれますignore())。

の固定サイズの配列の使用を避けるために、引数としてstd::getline()a を受け入れるバージョンがあることに注意してください。これは、投稿されたコードで誤って使用されています。std::stringchar

于 2013-05-29T14:47:19.667 に答える
0

あなたが見ている問題は、後の最初の改行が;1234によって消費されないことです。input_stream>>(int)そのため、次の getline はそのファイルの最後までしか読み取りません。

これは非常に構築されたシナリオであり、学業でよく見られます。テキストファイルを読み取るときのより一般的なシナリオは、ファイル全体を行ベースのテキストと見なすことです。

この場合、より便利です

string line;
while( std::getline( input_stream, line ) ){

}

適切であり、エラーが発生しにくい方法です。

通常、テキストファイルには事前定義された形式があります。おそらく行であり、行がファイルから読み取られた後にname = valueそのように解析されます。

于 2013-05-29T14:55:20.420 に答える