关于cin.clear()的问题 我正在读《加速C++》这本书。(我的问题在第57页,如果你们有这本书的话)
问题如下: 我们有一个函数可以读取学生成绩:关于cin.clear()的问题 我正在读《加速C++》这本书。(我的问题在第57页,如果你们有这本书的话),c++,inputstream,C++,Inputstream,问题如下: 我们有一个函数可以读取学生成绩: ... while (in >> x) { // in and x are defined as an istream& and as a double hw.push_back(x); // hw is vector defined as vector<double>& } in.clear(); ... 。。。 而(in>>x){//in和x被定义为一个istream&和一个doubl
...
while (in >> x) { // in and x are defined as an istream& and as a double
hw.push_back(x); // hw is vector defined as vector<double>&
}
in.clear();
...
。。。
而(in>>x){//in和x被定义为一个istream&和一个double
hw.push_back(x);//hw是定义为向量的向量&
}
in.clear();
...
现在,在书中以及在cplusplus.com参考上都说明了清除功能重置所有错误状态,并且输入现在再次准备好读取一些输入。
问题是,如果我提出:
int a = 0;
cin >> a;
cout << a << endl;
inta=0;
cin>>a;
cout var){
向量推回(var);
}
对于(int f=0;f cout调用clear
清除失败读取设置的错误状态。它不会处理输入流中可能存在的字符
如果错误状态是由于未能读取double而导致的,则下一个字符很可能也将作为整数失败
如果你尝试
char ch;
cin >> ch;
我相信这样会更好
否则,您必须忽略
某些字符以清除不可读的输入。调用清除
清除读取失败设置的错误状态。它不会处理输入流中可能存在的字符
如果错误状态是由于未能读取double而导致的,则下一个字符很可能也将作为整数失败
如果你尝试
char ch;
cin >> ch;
我相信这样会更好
否则,您必须忽略一些字符,以消除不可读的输入。代码示例中的while循环将读取整数值,直到输入结束或读取时出现错误,例如,给出一个不能作为整数出现的字符,如“q”
发生错误时,您可能有机会通过调用clear()
,然后从cin
的输入缓冲区中删除有问题的字符,从该错误中恢复:
char dummy;
cin >> dymmy;
然后您可以再次读取int
。代码示例中的while循环读取整数值,直到输入结束或读取时出现错误,例如,给出一个不能作为整数出现的字符,如“q”
发生错误时,您可能有机会通过调用clear()
,然后从cin
的输入缓冲区中删除有问题的字符,从该错误中恢复:
char dummy;
cin >> dymmy;
然后您可以再次阅读int
。在cin.clear()之后,流应该再次处于工作状态,问题可能在于您没有显示的代码;发布显示您问题的经典“最小可编译示例”。好的,我添加了一个我自己编写的示例。在cin.clear()之后
流应该再次处于工作状态,问题可能在于您没有显示的代码;发布经典的“最小可编译示例”这说明了您的问题。好的,我添加了一个我自己编写的示例。是否有任何东西可以在1函数中执行.ignore和.clear操作?否,但您可以轻松编写一个。:-)是否有任何东西可以在1函数中执行.ignore和.clear操作?否,但您可以轻松编写一个。:-)