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

C语言中按需向数组追加整数并求最大值的代码错误排查

代码中的错误及修正方法
  • 数组遍历范围错误
    你用sizeof(numbers)/sizeof(numbers[0])计算的是数组总容量100,但实际用户输入的元素数量是变量i的值(每次输入后i自增)。遍历整个数组会把未初始化的垃圾值纳入最大值判断,这些垃圾值可能远大于输入的数,直接导致结果错误。
    修正:把size = sizeof(numbers)/sizeof(numbers[0]);改成size = i;,或者直接在for循环条件里写j < i。

  • 输入缓冲区处理不当
    输入整数后按下的回车会留在输入缓冲区,第一个scanf("%c", &answer)会读取这个换行符,导致answer被错误赋值,循环逻辑混乱。你现在用的scanf("%c");写法不严谨,若用户输入多字符(比如YES)仍会出问题。
    修正:把读取answer的代码改成scanf(" %c", &answer);(%c前的空格会自动跳过所有空白字符,包括换行、空格),删掉多余的scanf("%c");。

  • 最大值初始化不合理
    你把max初始化为-9999,若用户输入的所有整数都小于-9999(比如全是-10000),最大值判断逻辑不会更新max,输出结果错误。
    修正:在第一次输入后把max初始化为numbers[0],避免固定值带来的边界问题。

修正后的示例代码

#include <stdio.h>

int main(){
    
    char answer; 
    int numbers[100];
    int i = 0;
    int max;

    do{
        printf("Please enter an number: ");
        scanf("%d", &numbers[i]);
        // 第一次输入时初始化最大值
        if(i == 0){
            max = numbers[i];
        }
        printf("Would you like to keep adding numbers:(Y/N)");
        // 用空格跳过输入缓冲区的空白字符
        scanf(" %c", &answer);
        i++;

    }while(answer == 'Y' || answer == 'y'); // 支持小写y更友好


    for(int j = 1; j < i; j++){ // 从第二个元素开始比较
        if(numbers[j] >= max){
            max = numbers[j];
        }
    }

    printf("The max number is: %d", max);

    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 01:21:05