6

この for ループの cout ステートメント:

for (vector<Student>::iterator qw = students.begin(); qw != students.end(); ++qw){
    Student a = *qw;
    name = a.getName();
    regno = a.getRegNo();
    std::cout << "Name: "<< name << " Reg Number: " << regno << endl;
}

いくつかの奇妙な動作を作成しています。cout は次のように出力する必要があります。

名前: マイク・サンダーソン登録番号: 10101

ただし、実際に出力するのは次のとおりです。

登録番号: 10101on

cout ステートメントの 2 番目の部分の後、行頭に戻ってそれ自体を上書きしているように思えますが、なぜでしょうか? 皆さんが私を助けてくれることを願っています。さらに情報が必要な場合はお知らせください!

4

1 に答える 1

17

これは、キャリッジ リターン文字が行うことです (つまり\r、文字列リテラルで)。name文字列\rの末尾にがあると仮定します。どうやってそこにたどり着いたのかを突き止めて、取り除く必要があります。

おそらく、ファイルから名前を読み取り、そのファイルはWindowsで作成されたものであり\r\n、デフォルトで行が終了していると推測しています。C++ は通常、テキスト ファイルから読み取るときに行末間の変換を処理しますが、ファイルをバイナリ ファイルとして読み取り、\n区切り記号として使用する場合、この問題が発生します。は行の一部であるかの\rように読み取られます。

于 2013-01-12T16:39:22.457 に答える