C语言数组重复值检测程序崩溃、输入序号异常问题求助
故障排查及修复方案
问题原因
你的代码所有异常均来源于语句末尾多余的分号,分号会被识别为循环/判断的空执行体,直接打乱原有执行逻辑,还引发了数组越界:
- 主函数中
for (i = 0; i < 10; i++);末尾的分号让循环执行了10次空语句,结束后i的值已经变为10。后续输入逻辑仅执行1次,所以提示输入第11个数字,同时向array_A[10]写入数据属于数组越界访问,直接触发程序崩溃。 - 去重检测函数
part_A中三个语句都多了多余分号:- 外层循环
for (i=0; i<10; i++);执行完后i固定为10 - 内层循环
for (j=i+1; j<10; j++);执行完后j固定为11 - 判断语句
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
相关产品推荐
相关产品推荐

