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
相关产品推荐
相关产品推荐

