-1

免責事項: この質問は、教科書のプログラミング演習に直接関係しています。

テキストブックから C++ プログラミング演習に取り組んでいますが、それを機能させる方法がわかりませんでした。誰かが私のコードのエラーを指摘できれば幸いです。ここで問題が発生します...

「istream_iterator、コピー アルゴリズム、および back_inserter を使用して、空白で区切られた int 値を含むテキスト ファイルの内容を読み取ります。int 値を int のベクトルに配置します。コピー アルゴリズムの最初の引数は、istream_iterator オブジェクトである必要があります。テキスト ファイルの ifstream オブジェクトに関連付けられています. 2 番目の引数は, クラス テンプレート istream_iterator のデフォルト コンストラクタを使用して初期化された istream_iterator オブジェクトである必要があります.結果のオブジェクトは "終了" イテレータとして使用できます. ファイルの内容を読み取った後, ファイルの内容を表示します.結果のベクトル。」

次のコードを作成しました。コードはコンパイルされますが、何もしません。

int main()
{
    std::vector< int > testVector;

    std::ifstream inputFile( "/Users/GrinNare/Documents/Study/C++/Chapter 16/Chapter 16/16_10_Text_File.txt", std::ios::in );

    std::istream_iterator< int > inputFromFile( inputFile );

    std::copy( inputFromFile, std::istream_iterator< int >(), back_inserter( testVector ) );

    for ( int i = 0; i < testVector.size(); i++ )
        std::cout << testVector[i] << "\t";

    std::cout << std::endl;

    return 0;
}

テキスト ファイルには、「12 23 43 34」が含まれています。

コードをデバッグしようとしたところ、改行ではなく空白で区切られているため、テキスト ファイルの値が int ベクトルに正しく読み込まれていないことに気付きました。

誰か助けてくれませんか?!

4

1 に答える 1

0

コードを ideone で試し、 read from に変更しましたstd::cin期待どおりに動作します。

問題を再現できる唯一の方法は、入力として開くことができなかったファイルを使用したときでした。

したがって、次を追加すると、何が起こっているかがわかると思います。

// after opening the file
if (! inputFile) {
  std::cerr << "Failed to open file" << std::endl;
  return 1;
}

おそらく、そのパスにタイプミスがあります。

于 2015-07-11T10:49:59.697 に答える