每当我输入无法转换为整数的东西时,我都会得到一个无限循环.有什么建议?
cout << "Selection: ";
cin >> choice;
while((choice < 0)||(choice > 6)||(cin.fail())) {
cout << "That isn't a number." << endl;
cin.clear();
cout << "Selection: ";
cin >> choice;
}
Run Code Online (Sandbox Code Playgroud)
只是clear还不够:cin会一次又一次地阅读这个角色.你需要ignore它.
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n') 是实现这一目标的常用方法.
另一种方法是将整行读作字符串然后解析它(如C#/ Java ecc.).在代码方面,它可能是:
string s;
getline(cin, s);
int n = std::stoi(s);
Run Code Online (Sandbox Code Playgroud)
请注意,std::stoi可以扔std::invalid_argument或std::out_of_range.使用此方法,您可以不必忽略任何内容(因此更容易处理/学习),尽管您可能需要捕获可能的异常.
考虑到这一点,即使被其他语言使用,此方法在逻辑上也不正确:仅在特殊情况下(例如内部I/O故障)抛出异常.错误的用户输入是您所期望的.
| 归档时间: |
|
| 查看次数: |
307 次 |
| 最近记录: |