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

C语言检查数组用户输入重复:输入1需第三次才触发检测的问题

问题原因分析

你的代码存在两个关键错误,导致输入1时第三次才检测到重复:

  1. 数组初始元素未被赋值
    当i=0(第一次输入)时,内层循环for(int j = 0; j < i; j++)的条件j < 0不成立,循环体完全不执行。这意味着num[0]始终是内存中的随机垃圾值,不会被设置为第一次输入的数字。

  2. 赋值逻辑错误
    你把num[i] = input放在了内层循环的else分支里,这会导致:

    • 第一次输入1时,num[0]未被赋值,仍是随机值;
    • 第二次输入1时,内层循环仅执行j=0的判断:如果随机值≠1,就会把num[1]设为1,但num[0]还是随机值;
    • 第三次输入1时,内层循环先执行j=0:随机值≠1,设置num[2]=1;接着执行j=1,此时num[1]等于1,才触发重复提示。

其他数字看似正常,大概率是巧合——第一次输入后,num[0]的随机值刚好等于该数字,导致第二次输入时触发检测,但这不是代码逻辑正确的表现。

修复后的代码
int main()
{
    int input;
    int num[16];

    printf("Enter the numbers from 1 to 16 in any order:\n");

    for(int i = 0; i < 16; i++){
        scanf("%d", &input);
        int is_duplicate = 0;

        // 先检查是否重复
        for(int j = 0; j < i; j++){
            if(num[j] == input){
                printf("You have already entered this number!\n");
                is_duplicate = 1;
                i--; // 回退索引,重新接收输入
                break;
            }
        }

        // 只有不重复时才赋值
        if(!is_duplicate){
            num[i] = input;
        }
    }
    return 0;
}

修复点说明:

  • 新增is_duplicate标记,统一控制是否赋值;
  • 将赋值操作移到内层循环外,确保只有确认无重复时才给num[i]赋值;
  • 第一次输入时(i=0),内层循环不执行,直接进入赋值分支,正确设置num[0]。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 22:20:34