猿问

为什么eof ctrl+d模拟工作不正常?

下面一段C++测试代码,whileloop使用eof来跳出循环。
strings1;
while(cin>>s1)
{
cout<}
//cout<//cin.ignore(10000,'0');//加入无效
//cin.clear()//加入无效
strings3,s4;
cout<<"inputtwostrings:"<getline(cin,s3);
getline(cin,s4);
if(s3==s4){
cout<<"thestringsareequal!"<}
elseif(s3>s4){
cout<<"s3islarger!"<}else{
cout<<"s4islarger!"<}
在mac终端运行结果如下,粗体为我的输入,斜体为cout打印。
可以看到要求输入两string的时候压根就没有输入机会就玩儿蛋了。helloworld
hello
worldinputtwostrings:
thestringsareequal!
另外加入注释代码也不能让cin重新工作。
如果注释貂s1相关循环代码,s3s4测试代码可以真常工作。
请问这是为什么?mac终端ctrl+d模拟eof之后需要做什么特殊设置才能工作吗?谢谢。
白衣染霜花
浏览 371回答 2
2回答

qq_花开花谢_0

自己测试我到原因了。因为EOF一直都在cinstream里面,clear()之后每次cin读入都是读入EOF,自然统统出错。google了很久都没有找到flushterminalEOF的方法。有没有建议怎么flushterminalEOF?还是C++根本就没有这个选项,需要继续测试只能另开一个工程?谢谢!update:找到方法了。结合下面两个函数就可以flusheof,然后继续接受输入。cin.clear();clearerr(stdin);//combinewithcin.clear()andclearerr(stdin)works!

摇曳的蔷薇

在win下使用MSYS32上测试没有问题代码跟你一样使用cin.clear();而且官方istream::clear的相关说明有讲到可以设置eofbit为false
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答