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

C语言读取命令行数字求最大最小值及计数实现求助

问题根因

  • 最小值计算的循环条件完全错误:你写的for (int j = 1; j > argc; --j)初始就不满足判断条件,循环从未执行,min变量一直停留在初始的INT_MAX没有更新
  • 边界初始化不合理:用int类型的边界值INT_MIN、INT_MAX给double类型的最值做初始化,如果输入的浮点数超出int的取值范围,会出现判断逻辑错误
  • 重复遍历参数冗余:两次遍历命令行参数没有必要,一次遍历就可以同时完成最大值、最小值计算和有效数字统计

修复后代码

#include <stdio.h>
#include <float.h>   

int main (int argc, char **argv) 
{
    // 初始化适配double全范围取值
    double max = -DBL_MAX;
    double min = DBL_MAX;
    int valid_count = 0;

    // 一次遍历完成所有计算
    for (int i = 1; i < argc; i++) {                
        double n = 0;                                  
        if (sscanf(argv[i], "%lf", &n) == 1) {
            valid_count++;
            if (n > max) {
                max = n;
            }
            if (n < min) {
                min = n;
            }
        }
    }

    if (valid_count == 0) {
        printf("no valid numbers read\n");
    } else {
        printf("%d numbers read;   max: %.2lf;   min: %.2lf\n", valid_count, max, min);
    }
    return 0;
}

实现说明

  1. 新增valid_count变量,每次sscanf成功转换数字就加1,即可统计有效数字总数
  2. 最值初始化改用<float.h>中定义的double类型边界值,适配浮点数的全取值范围
  3. 合并两次循环为一次,遍历所有命令行参数时同步做最大值、最小值判断,降低不必要的性能开销
  4. 输出格式按需求保留两位小数,同时增加了无有效数字输入的容错处理

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 00:54:00