关于 c :Catch cin 异常
Catch cin exception
我想询问用户输入,我用 cin 得到这样的输入
|
1
2 3 4 5 6 7 8 9 |
void AskForGroundstate() {
cout <<"Please enter an groundstate potential value in Volt:" << endl; if (!(cin >> _VGroundstate)) { cin.clear(); cin.ignore(); cout <<"Groundstate potential not valid." << endl; AskForGroundstate(); } } |
_VGroundstate 是一个双精度值,所以如果用户输入一个没有数字的字符串,它应该再次要求他更好地输入。但问题是,当输入例如 "AA" 时,程序会执行 AskForGroundstate 两次,执行 "AAA" 三次等。我是否使用了 clear 错误?
相关讨论
- 这不是问题,但是以下划线开头的名称后跟大写字母 (
_Vgroundstate ) 和包含两个下划线的名称保留供实现使用。不要使用它们。
问题是
|
1
2 |
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\
'); |
这可确保在最终用户再次提示输入之前删除所有无效输入。
相关讨论
- Clion 说,无法解析容器 numeric_limits 吗?
-
@LucaThiede,与标准库中的其他所有内容一样,您必须包含其标头
<limits> 。 -
@LucaThiede 您需要包含
<limits> 标头。