此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应该打印的是这样的:
姓名:Mike Sanderson Reg编号:10101
然而它实际打印出它:
注册号码:10101on
在我看来,在cout语句的第二部分之后它会回到行的开头并覆盖自己,但为什么呢? 希望你们能帮助我,如果你需要更多信息,请告诉我们!
答案 0 :(得分:16)
这是回车符所做的(即字符串文字中的\r
)。我假设name
字符串末尾有\r
。你需要弄清楚它是如何到达并将其移除的。
我猜你可能从文件中读取了名称,而该文件是在Windows上创建的,默认情况下以\r\n
为结尾。在从文本文件中读取时,C ++通常会处理行结尾之间的转换,但如果您将文件作为二进制文件读取并使用\n
作为分隔符,则会遇到此问题。 \r
将被读取,好像它是该行的一部分。