C++ 如果我输入;Ctrl+;",;,它会崩溃,如何修复?

C++ 如果我输入;Ctrl+;",;,它会崩溃,如何修复?,c++,inputstream,eof,C++,Inputstream,Eof,现在,如果我不输入任何内容,我键入的Ctrl+Z将不会崩溃。 但是如果我输入tt,输出是tt 现在我不知道如何修复它。请帮帮我。你应该试试: while (!cin.eof()) { cin >> str; svec.push_back(str); } 为什么额外tt 如果我展开您的while循环,它如下所示: while (cin >> str) { svec.push_back(str); } 您还可以阅读

现在,如果我不输入任何内容,我键入的Ctrl+Z将不会崩溃。 但是如果我输入
tt
,输出是
tt

现在我不知道如何修复它。请帮帮我。

你应该试试:

 while (!cin.eof())
    {
        cin >> str;
        svec.push_back(str);
    }
为什么额外tt
如果我展开您的while循环,它如下所示:

while (cin >> str)
{
    svec.push_back(str);
}

您还可以阅读

是否使用调试器查看崩溃的位置?另外,使用stringstream而不是
std::cin
可能是一个好主意,您可以使用EOF填充stringstream。另请参见
&&!cin.eof()是冗余的<代码>操作符>>
将返回流对象,当它到达EOF时,计算结果为
false
。我在vs2013中尝试了你的代码,如果我不输入任何内容,然后键入
ctrl+z
,它仍然会崩溃,所以你能给我其他建议吗?你可以尝试
执行{if(cin>>str)svec.push_-back(str)}而(!cin.EOF())
。虽然我认为额外的检查是多余的,你应该设法找到崩溃的根源。我试过了,它也崩溃了。如果我使用
!cin.eof()
while
(不在
do{}while
)中,它不会崩溃。但正如您所说,它进入循环的次数比作者预期的要多一次。如果出现读取错误,循环将永不终止。如果不使用
cin.eof()
,它将崩溃。我检查了崩溃的位置并修复了它。非常感谢你!
while (cin >> str)
{
    svec.push_back(str);
}
1. buf [tt tt tt, not eof], vec []
  a. is eof no
  b. read and push str
2. buf [tt tt, not eof], vec [tt]
  a. is eof no
  b. read and push str
3. buf [tt, not eof], vec [tt tt]
  a. is eof no
  b. read and push str
4. buf [, not eof], vec [tt tt tt]
  a. is eof no
  b. read and push str [read fails, str contains old value and eof is set]
5. buf [eof], vec [tt tt tt tt]
  a. is eof yes
  b. break