You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

C语言数组最值查找问题:最小值输出异常求助

问题排查与修复方案

你的代码里有两个关键问题导致最小值输出异常,我来一步步拆解:

1. 未初始化的min/max初始值

你在代码最开头就把minmax初始化为array[0],但这时候数组array还没有被用户输入的值填充,array[0]是栈内存里的随机垃圾值(可能是一个极大的负数或者奇怪的数)。后续遍历数组时,如果所有输入的数都比这个垃圾值大,min就会一直保留这个初始的垃圾值,导致输出异常。

2. 数组遍历的循环条件错误

你的遍历循环条件是count <= total && array[count] != 0,这里有两个问题:

  • count <= total会导致数组越界total是最终的count值,比如你输入了3个数(包括终止用的0),total=3,循环会访问array[3],而这个位置的元素从未被初始化,会引入随机值干扰判断。
  • array[count] != 0提前终止循环:如果用户输入的0被存入数组(你的代码逻辑就是这样),循环遇到这个0就会停止,导致后面的元素(如果有的话)没被遍历到;如果用户直接输入0,循环根本不会执行,minmax还是初始的垃圾值。

修复后的代码

我调整了逻辑:把终止用的0排除在数组之外(因为它只是退出信号,不是需要统计的元素),同时修正了min/max的初始化时机和遍历条件:

#include<stdio.h>
#define SIZE 100
int main() {
    int count = 0, store, array[SIZE], total;
    int min, max;

    do {
        printf("\nEnter integer number %d. Press 0 to exit: \n", (count + 1));
        scanf("%d", &store);
        // 只有输入非0且数组未满时,才存入数组
        if (store != 0 && count < SIZE) {
            array[count++] = store;
        }
    } while (count < SIZE && store != 0);

    total = count;
    printf("Total number of values in array is %d.\n", total);

    // 处理边界情况:用户没有输入任何有效数字(直接输入0)
    if (total == 0) {
        printf("\nNo valid integers were entered.\n");
        return 0;
    }

    // 用第一个有效元素初始化min和max
    min = array[0];
    max = array[0];

    // 遍历所有有效元素
    for (count = 1; count < total; count++) {
        if (array[count] < min) {
            min = array[count];
        }
        if (array[count] > max) {
            max = array[count];
        }
    }

    printf("\nThe min value is %d.\nThe max value is %d.\n", min, max);
    return 0;
}

关键修复点说明

  • minmax的初始化移到数组有有效元素之后,用第一个有效元素作为初始值,避免垃圾值干扰。
  • 修改了存入数组的逻辑:只有非0的输入才会被存入数组,终止用的0不会被统计进去,更符合用户“输入整数直到输入0”的需求。
  • 遍历循环改为count < total,确保只访问已存入的有效元素,不会越界。
  • 增加了边界情况处理:当用户直接输入0时,给出提示,避免错误输出。

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

火山引擎 最新活动