C++程序输入字母时被判定属于[-1,1]区间未触发错误提示怎么办
问题根因
- 当你向
double类型变量x输入字母等非数值内容时,cin >> x输入操作会执行失败:此时cin会被标记为失败状态,且遵循C++11及之后的标准,输入失败的数值类型变量会被自动赋值为0。0刚好满足x >= -1 && x < 1的判断条件,所以直接进入了第一个有效区间分支。 - 你代码中第三个
else分支本身逻辑上不可能被合法/非法的数值输入触发:所有实数必然要么落在[-1,1)区间,要么不在该区间,不存在第三种数值情况,因此这个分支原本就不能用来判断输入是否合法。
修复方案
你需要在做区间判断前,先判断输入操作本身是否成功,输入失败时直接走非法输入提示逻辑,参考修复后代码:
#include <iostream> #include <limits> using namespace std; int main() { double x ; cout << "Enter a real number : " ; cin >> x ; // 先判断输入是否成功 if (cin.fail()) { cout << "Error you have not entered a valid real number!" << endl; // 清空cin的错误标记 cin.clear(); // 清空输入缓冲区残留的非法字符 cin.ignore(numeric_limits<streamsize>::max(), '\n'); } else if ((x >= -1) && (x < 1)) { cout << "The nunber you have entered is valid and lies in the interval -1,1!" << endl; } else { // 只要输入成功,非区间内的数值必然走这个分支,不需要重复判断区间 cout << "Unfortunetely the number you entered is valid but does not lie in the interval" << endl; } return 0; }
内容的提问来源于stack exchange,提问作者Spare_Definition234
相关产品推荐
相关产品推荐

