C ++ cout在for循环中覆盖自身

时间:2013-01-12 16:36:46

标签: c++ cout

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

1 个答案:

答案 0 :(得分:16)

这是回车符所做的(即字符串文字中的\r)。我假设name字符串末尾有\r。你需要弄清楚它是如何到达并将其移除的。

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