考虑以下代码,它采用整数输入然后打印 cin 流状态:
#include <iostream>
using namespace std;
int main()
{
int number;
cout<<"Enter a number \n";
cin>>number;
cout<<cin.rdstate()<<endl;
return 0;
}
如果输入的数字是“zzzz”,则 rdstate 返回值 4。
如果输入的数字是“10zzzz”,则 rdstate 返回值 0,数字的值为 10,输入流中包含“zzzz”。
我的问题是:
1. 为什么“10zzzz”的输入不被视为无效输入(至少应该设置一个失败位。)
2. 什么是检测和处理这种情况的优雅解决方案。
谢谢!!!
最佳答案
首先我想问一下你要做什么:
cout<<cin.rdstate()<<endl;
阅读此页以正确使用 rdstate() http://www.cplusplus.com/reference/iostream/ios/rdstate/
第二个: 要检查输入是字符串类型还是整数类型,您可能需要添加一些额外的东西,将输入字符串转换为整数数据,并在输入无效输入时以错误消息响应。
因此这将帮助你:
int main() {
string input = "";
// How to get a string/sentence with spaces
cout << "Please enter a valid sentence (with spaces):\n>";
getline(cin, input);
cout << "You entered: " << input << endl << endl;
// How to get a number.
int myNumber = 0;
while (true) {
cout << "Please enter a valid number: ";
getline(cin, input);
// This code converts from string to number safely.
stringstream myStream(input);
if (myStream >> myNumber)
break;
cout << "Invalid number, please try again" << endl;
}
cout << "You entered: " << myNumber << endl << endl;
// How to get a single char.
char myChar = {0};
while (true) {
cout << "Please enter 1 char: ";
getline(cin, input);
if (input.length() == 1) {
myChar = input[0];
break;
}
cout << "Invalid character, please try again" << endl;
}
cout << "You entered: " << myChar << endl << endl;
cout << "All done. And without using the >> operator" << endl;
return 0;
}
关于c++ - C++ 流中的无效输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10512998/