假设在控制台的输入是:hello world my son 回车 ctrl + z 回车
在经过如下代码后dq里保存的值会变成 {"hello", "world", "my", "son", "son"}
string s1;
deque<string> dq;
while (!cin.eof()) {
cin >> s1;
dq.push_back(s1);
}
而将上述代码改成如下形式后,dq里保存的值正常了:{"hello", "world", "my", "son"}
string s1;
deque<string> dq;
while (cin >> s1) {
dq.push_back(s1);
}
目前还没有找到原因,期待大佬解惑
更新の分割线
在经过先进的逐行print大法寻找bug之后发现原因其实很简单Orz
![]() |
eof标志位的修改是在循环体内部输入ctrl z的时候,此时cin并没有覆盖s1保存的上次输入的值,即“son”,因此会多出来一个。 crtl z将eofbit和failbit置1,随后while检查eof并退出循环 |

8861

被折叠的 条评论
为什么被折叠?



