如何在循环中存储用户输入?C语言循环程序异常求助
问题分析与修复方案
原代码的核心问题
- 局部变量未初始化:
int num;作为局部变量,未初始化时会持有随机值。如果随机值≤0,程序直接跳过循环;若随机值>0才会进入循环,这是完全不可控的错误行为。 - 循环逻辑顺序错误:当前先判断
num>0再执行输入,输入0后,continue会直接回到循环开头,此时num为0,循环本应终止,但你看到的空白是因为程序退出前没有额外输出,看起来像卡住。
修复后的代码
#include <stdio.h> int main() { int greatest = 45; int num; // 先执行输入,再判断是否进入循环 printf("enter number-"); scanf("%d", &num); while(num > 0) { if (num > greatest) { greatest = num; } // 无需else continue,不满足条件直接执行下一次输入即可 printf("enter number-"); scanf("%d", &num); } // 添加输出最大数的语句,让程序逻辑更完整 printf("The greatest number is: %d\n", greatest); return 0; }
关于数组改造后无限循环的问题
其实这个需求根本不需要数组——你只需要跟踪当前最大值,没必要存储所有输入。如果一定要用数组,无限循环的原因大概率是你没正确设置终止条件:比如循环条件写成死循环,或者输入0时没有跳出循环。下面是一个仅作参考的数组实现(实际没必要这么做):
#include <stdio.h> int main() { int greatest = 45; int nums[100]; // 假设最多存储100个输入 int count = 0; int num; do { printf("enter number-"); scanf("%d", &num); if (num > 0) { nums[count++] = num; if (num > greatest) { greatest = num; } } } while(num > 0); printf("The greatest number is: %d\n", greatest); return 0; }
关键注意点
- 局部变量必须初始化,否则会出现不可预测的行为。
- 循环判断逻辑要和输入顺序匹配,避免先判断后输入导致的逻辑混乱。
- 此需求用单个变量跟踪最大值即可,数组属于冗余实现,会浪费内存。
内容的提问来源于stack exchange,提问作者user26419966
相关产品推荐
相关产品推荐

