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

C语言实现整数数组去重时出现异常输出是什么原因?

问题原因
  • scanf格式符书写错误:你代码中写的scanf("%d\n", &arr[i]);多了不必要的\n。格式串中的空白符会让scanf跳过输入中所有连续的空白字符,直到遇到第一个非空白字符才结束本次读取,这导致数组实际读取到的值和你输入的内容不匹配,你看到的48就是读取错误产生的垃圾值。
  • 去重逻辑存在局限性:你当前将重复元素赋值为0、仅打印大于0的元素的实现,仅适用于数组元素全为正整数的场景,若输入包含0或负数会直接失效。
修正后可运行代码
#include <stdio.h>

int main()
{
    int arr[5],i,j;
    printf("Enter the values of the array\n");
    for(i=0;i<5;i++)
    {
        // 去掉格式串里多余的\n
        scanf("%d", &arr[i]);
    }
    for(i=0;i<5;i++)
    {
        for(j=i+1;j<5;j++)
        {  
            if(arr[i]==arr[j])
            {
                arr[j] = 0;
            }
        }
    }
    for(i=0;i<5;i++)
    {
        if(arr[i] > 0)
        {
            printf("%d ", arr[i]);
        }
    }
    return 0;
}
优化建议

如果需要兼容包含0、负数的数组去重,可以额外定义一个和数组长度相同的标记数组,用布尔值记录对应位置的元素是否为重复项,避免直接修改原数组的值做判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 01:54:04