C++ 如果我输入;Ctrl+;",;,它会崩溃,如何修复?
现在,如果我不输入任何内容,我键入的Ctrl+Z将不会崩溃。 但是如果我输入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); } 您还可以阅读
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