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 语句的第二部分之后,它会回到行首并覆盖自身,但为什么呢?希望你们能帮助我,如果您需要更多信息,请告诉我!

4

1 回答 1

17

这就是回车符的作用(即\r在字符串文字中)。我假设name字符串\r的末尾有一个。您需要弄清楚它是如何到达那里并将其删除的。

我猜你可能从一个文件中读取了名称,并且该文件是在 Windows 上创建的,默认情况下以 结尾\r\n。从文本文件读取时,C++ 通常会为您处理行尾之间的转换,但如果您将文件作为二进制文件读取并\n用作分隔符,则会遇到此问题。将\r被视为行的一部分。

于 2013-01-12T16:39:22.457 回答