gpt4 book ai didi

C++:进入EOF后cin流的condition状态能否恢复

转载 作者:行者123 更新时间:2023-11-30 05:40:47 30 4
gpt4 key购买 nike

这是我的测试代码:

#include<iostream>
using namespace std;
istream& func(istream &);
int main()
{
if(func(cin))
cout<<"good"<<endl;
return 0;
}
istream& func(istream &is)
{
int num;
is.clear();
auto old_state = is.rdstate();
while(is>>num)
cout<<num<<endl;
is.setstate(old_state);
return is;
}

问题是:如果我输入一个字符或者EOF的标记(我系统中的ctr_z)来打破while循环,那么程序直接终止。我期望cin流可以重置为正常状态并且被退回:

if(func(cin))
cout<<"good"<<endl;

但是当程序结束时我无法得到那个输出。那么我的理解有什么问题吗?

最佳答案

您需要忽略错误然后清除它。因此,作为示例,您只需将 while 循环更改为如下所示:

    while(true)
{
if(is>>num)
cout<<num<<endl; //if cin is numeric
else // we have an error
{
is.ignore(); // ignore the last error (else your program will run crazy)
is.clear(); // clear the state
break; // terminate console reading
}
}

关于C++:进入EOF后cin流的condition状态能否恢复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31448712/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com