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
相关产品推荐
相关产品推荐

