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

Zac*_*ell 6 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;
}
Run Code Online (Sandbox Code Playgroud)

创造一些奇怪的行为,cout应该打印的是这样的:

姓名:Mike Sanderson Reg编号:10101

然而它实际打印出来的是:

注册号码:10101on

在我看来,在cout语句的第二部分后,它将回到行的开头并覆盖自身,但为什么呢?希望你们能帮助我,如果你需要更多信息,请告诉我!

Jos*_*eld 17

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

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