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

C语言数组重复值检测程序崩溃、输入序号异常问题求助

故障排查及修复方案

问题原因

你的代码所有异常均来源于语句末尾多余的分号,分号会被识别为循环/判断的空执行体,直接打乱原有执行逻辑,还引发了数组越界:

  • 主函数中 for (i = 0; i < 10; i++); 末尾的分号让循环执行了10次空语句,结束后i的值已经变为10。后续输入逻辑仅执行1次,所以提示输入第11个数字,同时向array_A[10]写入数据属于数组越界访问,直接触发程序崩溃。
  • 去重检测函数part_A中三个语句都多了多余分号:
    1. 外层循环for (i=0; i<10; i++);执行完后i固定为10
    2. 内层循环for (j=i+1; j<10; j++);执行完后j固定为11
    3. 判断语句if (array_A[i]== array_A[j]);的分号让判断逻辑完全失效,无论元素是否相等都会直接返回true,功能完全不符合要求。

修正后完整代码

#include<stdio.h>
#include<stdbool.h>
bool part_A (int array_A[10]);

int main ()
{
    int array_A [10];
    int i=0;
    // 去掉for循环末尾的多余分号
    for (i = 0; i < 10; i++)
    {
        printf("Input number %d: ", i+1);
        scanf("%d", &array_A[i]);
    }
    int return_A = part_A (array_A);

    if (return_A == true)
    {
        printf("There are duplicate values.\n");
    }
    else
    {
        printf ("All values are unique.\n");
    }
    printf("-----------------\n");
    return 0;
}

bool part_A (int array_A[10])
{
    int i, j;
    // 去掉外层循环末尾的多余分号,加大括号明确循环范围
    for (i=0; i<10; i++)
    {
        // 去掉内层循环末尾的多余分号,加大括号明确循环范围
        for (j=i+1; j<10; j++)
        {
            // 去掉if判断末尾的多余分号
            if (array_A[i]== array_A[j])
            {
                return true;
            }
        }
    }
    return false;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 15:36:03