目前在我的代码中创建整数验证循环时遇到问题。
尝试验证整数,但是如果您输入此代码将无法正常工作,例如字符串'22a',它将try_no设置为22。是否有任何方法可以检查每个字符输入是否确实是字符串,例如'22a'或“ 2a2”将被认为是错误的,并且循环将继续直到输入有效的整数?
int trial_no;
bool valid = false;
while(!valid)
{
valid = true; //assume trial_no will be an integer
cout << "Enter the number of die throws to simulate" << endl;
cin >> trial_no;
if(cin.fail()) // exit loop condition is dependent on trail_no being a valid integer
{
cin.clear(); //corrects stream
cin.ignore(numeric_limits<streamsize>::max(), '\n'); //skips left over stream data (numeric_limit
// is in case user enters more than one letter))
cout << "Please enter an integer value" << endl;
valid = false; //cin not an integer so loop goes round to try again
}
}
最佳答案
可以说,最好的方法是将整个行作为字符串读取并利用std::stoi函数:
#include <iostream>
#include <string>
int main() {
std::cout << "Enter an integer: ";
std::string tempstr;
bool valid = false;
std::getline(std::cin, tempstr);
try {
int result = std::stoi(tempstr);
std::cout << "The result is: " << result;
valid = true;
}
catch (std::invalid_argument) {
std::cout << "Could not convert to integer.";
valid = false;
}
}
如注释中所指出,此函数还可以引发std::out_of_range异常。这假定您的编译器具有C ++ 11(+)功能。如果不是,请沿着std::stringstream路线:
std::string tempstr;
std::getline(std::cin, tempstr);
std::stringstream ss(tempstr);
int result;
bool valid = false;
if (ss >> result) {
valid = true;
}
else {
valid = false;
}
关于c++ - C++整数验证,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46891750/