如何为C++程序添加循环校验 保证用户输入正数、负数时提示重输
C++ 输入正数校验实现方案
以下是添加完校验逻辑的完整可运行代码:
#include <iostream> #include <cmath> #include <limits> using namespace std; int main() { float sq, n; // 循环获取输入,直到拿到合法正数 do { cout << "Enter any number:"; cin >> n; // 校验非数字输入场景 if (cin.fail()) { cout << "错误:输入内容不是合法数字,请重新输入" << endl; // 清空输入流错误标记 cin.clear(); // 清空输入缓冲区所有残留内容,避免死循环 cin.ignore(numeric_limits<streamsize>::max(), '\n'); n = -1; } // 校验负数/0输入场景 else if (n <= 0) { cout << "错误:不能输入负数或0,请输入大于0的正数后重试" << endl; } } while (n <= 0); sq = sqrt(n); cout << "Square root of " << n << " is " << sq; return 0; }
逻辑说明
- 采用
do-while循环包裹输入流程,无需重复编写输入提示代码,保证至少执行一次输入操作 - 新增两类输入校验覆盖异常场景:
- 非数字输入校验:通过
cin.fail()判断输入流是否异常,比如用户输入字母、符号等非数字内容,出现异常后先清空错误标记,再清空缓冲区残留的非法内容,避免程序进入死循环 - 非正数校验:输入为负数或0时直接抛出错误提示,重新进入输入流程
- 非数字输入校验:通过
- 只有当输入值大于0时才会退出循环,执行后续开平方计算逻辑,完全满足需求。
内容的提问来源于stack exchange,提问作者Darin Hinze
相关产品推荐
相关产品推荐

