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

C语言校验用户输入数组数字不重复的代码运行异常如何解决

问题排查与修复方案

核心错误点

  • 循环体语法错误:for (i=0; i<n; i++) 后未用大括号包裹全部循环逻辑,导致只有scanf ("%d",&num);被循环执行n次,后续判重、赋值逻辑都不属于for循环,只会在for循环结束(i等于n)后执行一次,还会触发数组越界访问。
  • 判重逻辑错误:仅对比num == N[i],而N[i]是未初始化的垃圾值,且需要和之前已经存入数组的所有元素逐一对比才能判断是否重复。
  • 重复处理逻辑缺失:检测到重复后没有阻止赋值、也没有要求用户重新输入,i依然会自增,无法实现去重效果。

修复后可运行代码

#include<stdio.h>
int main ()
{
    int n;
    int i, j;
    int num, is_dup;
    printf("请输入你要录入的数字总数 \n");
    scanf("%d",&n);
    int N[n];
    printf("请输入你的数字 \n");
    for (i=0; i<n; i++) {
        scanf ("%d",&num);
        // 判重逻辑:和之前已经存入的所有元素比对
        is_dup = 0;
        for (j=0; j<i; j++) {
            if (num == N[j]) {
                is_dup = 1;
                break;
            }
        }
        if (is_dup) {
            printf("你已经输入过这个数字,请重试\n");
            i--; // 重复的话i不自增,让用户重新输入当前位置的数
            continue;
        }
        N[i]=num;
        printf("____________ \n");
    }
    // 以下为验证数组存储的测试代码,可根据需求删除
    printf("你输入的不重复数组为:");
    for(i=0; i<n; i++) {
        printf("%d ", N[i]);
    }
    getchar();
    getchar();
    return 0;
}

关键修改说明

  • 把所有循环逻辑包裹在for循环的大括号内,确保每次输入后都会执行判重、赋值操作
  • 新增内层循环遍历已存入的数组元素,逐一判断新输入数字是否重复
  • 新增重复标记变量is_dup,检测到重复后将i减1抵消本次循环的i自增,让用户重新输入对应位置的数字,跳过后续赋值逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 18:15:05