C++ 重置cin流状态C++;
这里我试图从用户那里得到一个整数,在输入正确时循环 在输入非整数值(例如“dsdfgsdg”)后,cin.fail()将按预期返回true,而循环体将开始执行 这里我使用cin.clear()重置cin的错误标志;与预期一样,cin.fail()返回false 但下一次对cin的调用不起作用,并将错误标志重新设置为打开 有什么想法吗C++ 重置cin流状态C++;,c++,validation,input,stl,C++,Validation,Input,Stl,这里我试图从用户那里得到一个整数,在输入正确时循环 在输入非整数值(例如“dsdfgsdg”)后,cin.fail()将按预期返回true,而循环体将开始执行 这里我使用cin.clear()重置cin的错误标志;与预期一样,cin.fail()返回false 但下一次对cin的调用不起作用,并将错误标志重新设置为打开 有什么想法吗 #include<iostream> using namespace std; int main() { int a; cin >>
#include<iostream>
using namespace std;
int main() {
int a;
cin >> a;
while (cin.fail()) {
cout << "Incorrect data. Enter new integer:\n";
cin.clear();
cin >> a;
}
}
#包括
使用名称空间std;
int main(){
INTA;
cin>>a;
while(cin.fail()){
cout>a;
}
}
在cin.clear()之后执行以下操作:
#include <iostream> //std::streamsize, std::cin
#include <limits> //std::numeric_limits
....
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n')
#包括//std::streamsize,std::cin
#包括//标准::数值限制
....
std::cin.ignore(std::numeric_limits::max(),“\n”)
上面所做的是清除输入流中仍然留在那里的任何字符。否则,cin将继续尝试读取相同的字符,并且由于样式问题而失败,首选此方法:
int main()
{
int a;
while (!(std::cin >> a))
{
std::cout << "Incorrect data. Enter new integer:" << std::endl;
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
}
intmain()
{
INTA;
而(!(std::cin>>a))
{
std::coutcin.clear()不会清除缓冲区;它会重置错误标志。因此,在清除cin缓冲区之前,您仍然会在缓冲区中输入sting,并且代码将不允许您输入新数据。cin.Ignore()
应该可以做到这一点。您必须使用cin.Ignore(…)