3 回答
TA贡献2003条经验 获得超2个赞
您可以像这样检查:
int x;
cin >> x;
if (cin.fail()) {
//Not an int.
}
此外,您可以继续获取输入,直到通过以下方式获取整数为止:
#include <iostream>
int main() {
int x;
std::cin >> x;
while(std::cin.fail()) {
std::cout << "Error" << std::endl;
std::cin.clear();
std::cin.ignore(256,'\n');
std::cin >> x;
}
std::cout << x << std::endl;
return 0;
}
编辑:要解决以下有关10abc之类的输入的注释,可以修改循环以接受字符串作为输入。然后检查字符串中是否包含数字以外的任何字符,并相应地处理该情况。在那种情况下,不需要清除/忽略输入流。验证字符串只是数字,然后将字符串转换回整数。我的意思是,这只是袖手旁观。可能有更好的方法。如果您接受浮点数/双精度数,则此方法将无效(必须在搜索字符串中添加“。”)。
#include <iostream>
#include <string>
int main() {
std::string theInput;
int inputAsInt;
std::getline(std::cin, theInput);
while(std::cin.fail() || std::cin.eof() || theInput.find_first_not_of("0123456789") != std::string::npos) {
std::cout << "Error" << std::endl;
if( theInput.find_first_not_of("0123456789") == std::string::npos) {
std::cin.clear();
std::cin.ignore(256,'\n');
}
std::getline(std::cin, theInput);
}
std::string::size_type st;
inputAsInt = std::stoi(theInput,&st);
std::cout << inputAsInt << std::endl;
return 0;
}
- 3 回答
- 0 关注
- 556 浏览
添加回答
举报