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

如何在循环中存储用户输入?C语言循环程序异常求助

问题分析与修复方案

原代码的核心问题

  1. 局部变量未初始化:int num;作为局部变量,未初始化时会持有随机值。如果随机值≤0,程序直接跳过循环;若随机值>0才会进入循环,这是完全不可控的错误行为。
  2. 循环逻辑顺序错误:当前先判断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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 19:57:11