【发布时间】:2020-08-19 09:35:48
【问题描述】:
我想验证double 键盘输入:
- 如果输入是
double,程序应该正常继续。 - 如果输入不是
double(包括Ctrl+Z),程序应清除流状态并忽略所有剩余输入,直到下一个\n才能接收新输入。
所以我写了这段代码:
#include "std_lib_facilities.h"
int main()
{
double val{};
cout << "Please enter a 'double' value:\n";
while (!(cin>>val))
{
cout << "ERROR: That is not a valid entry. Please try again\n";
cin.clear();
cin.ignore(INT_MAX, '\n');
}
cout << val << "\n\n";
keep_window_open();
return 0;
}
我有 2 个问题:(我想只使用 cin 和 cout 来解决这个问题。)
当用户输入 Ctr+Z 并按 Enter(与
'\n'相同)时,cin.ignore(INT_MAX, '\n');会一直等待输入'\n'。如果在 Ctrl+Z 之后已经有一个 Enter(或\n),为什么会发生这种情况?此代码不包括我的条目,例如:98ssssssssss。它将采用 98 值,并且 ssssssss 将保留在流中。如何改进代码,使其将其识别为错误条目?
【问题讨论】:
-
第 2 部分的答案很简单,而且您应该始终以这种方式完成此类任务。 1) 将输入读取为 string,2) 检查字符串的内容是否符合您对双精度的期望。 3)如果是则将字符串转换为double,否则报错。
标签: c++ validation