0
  in.open(filename.c_str(), ifstream::in);
  string name, email, group;
  while (in >> name >> email >> group) {
    in >> name >> email >> group;
    cout << name << email << group);
    ...
  }
  in.close();

inがタイプifstreamであり filename、データを読み取るファイルの名前であるこのコードについて考えてみます。入力ファイルのフォーマットは完全に問題ありません。多くの行にそれぞれ3つの文字列が含まれています。この部分は、ファイル内のすべてのデータを単に印刷する必要がありますが、idが行うのは、最初の行を除くすべての行を印刷することです。最初の行がスキップされるのはなぜですか?

4

4 に答える 4

2

in >> name >> email >> group;ループの本体からドロップします。状態のもので十分です。

于 2012-12-09T10:25:15.403 に答える
0

次の行を検討してください。

while (in >> name >> email >> group) {

プログラムがこの行に到達するたびに、括弧内のコードを実行します。この場合、「in」が読み取られ、実際にループの本体に入る前でも、名前、電子メール、グループが入力されます。

したがって、ループの本体が実行されるとき、最初の行はすでに読み取られています。

于 2012-12-09T10:28:50.443 に答える
0

読みすぎです。

while (in >> name >> email >> group)

すでに一度データを読み取り、次の行で再度読み取り、データを上書きします。繰り返しを取り除くと、あなたのcoutはうまくいくはずです。

in.open(filename.c_str(), ifstream::in);
string name, email, group;
while (in >> name >> email >> group) {    //Reads the data into the variables
    cout << name << email << group;        //Outputs the variables.
    ...
}
in.close();
于 2012-12-09T10:26:07.733 に答える
0

入力ファイルで文字列が改行演算子で区切られていない場合は、コードを使用して文字列を読み取ります。

  ifstream in;
  in.open("urfile.txt",ios::beg);
  string name, email, group;
  while (in.good()) {
    in >> name >> email >> group;
    cout << name << email << group;
  }
  in.close();
于 2012-12-09T10:39:42.327 に答える