如何修改C程序实现输入无效值(如字符串)时不会立即退出?
问题原因
原C语言圆柱体体积计算器未对输入做合法性校验,当输入字符串等非数值内容时,
scanf匹配失败,错误数据残留输入缓冲区,导致程序逻辑异常直接退出。
解决方案
核心修改逻辑如下:
- 校验每次
scanf的返回值,只有返回值为1时才代表成功读取到1个合法的double类型数值 - 读取失败时清空输入缓冲区残留的无效数据,避免后续读取重复匹配到错误内容
- 输入非法时给出提示,要求用户重新输入,直到获取到合法数值
修改后的完整代码:
#include<stdio.h> #include<windows.h> // 封装读取合法double数值的通用函数 double get_valid_double(const char* prompt) { double val; int read_res; while (1) { printf("%s", prompt); read_res = scanf("%lf", &val); if (read_res == 1) { // 读取成功直接返回数值 break; } // 清空输入缓冲区残留的无效字符 while(getchar() != '\n'); printf("输入无效,请输入合法的数字!\n"); } return val; } int main() { double Height = 0; double Diameter = 0; double Radius; double pi = 3.14; double Area; double volume; Height = get_valid_double("Enter the Height in cm: \n"); Diameter = get_valid_double("Enter the Diameter in cm: \n"); Radius = Diameter / 2.0; Area = pi * Radius * Radius; volume = Area * Height; printf("\n\n%fcm3\n\n", volume); system("pause"); return 0; }
如果需要适配中文使用场景,直接替换对应提示字符串为中文即可。
内容的提问来源于stack exchange,提问作者ask
相关产品推荐
相关产品推荐

