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

C++ cout overwriting itself while in for loop

本文关键字:覆盖 循环 cout for c++      更新时间:2023-10-16

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注册号码:10101

无论它实际打印出来的是什么:

注册编号:10101on

在我看来,在cout语句的第二部分之后,它返回到行开头并覆盖自己,但是为什么呢?希望你们能帮助我,如果你需要更多的信息让我知道!

这就是回车字符所做的(即字符串字面值中的r)。我假设name字符串的末尾有一个r。你需要弄清楚它是怎么在那里的,然后把它删除。

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