You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 16:06:04