数组输入超3个元素后程序陷入死循环,求代码修复方案
问题说明
创建数组存储不同数字,每次选取数组中两个元素求和,判断结果是否等于全局变量target(值为6)。但当数组元素数量超过3个时,代码会陷入死循环,请求解决该问题。
我的代码
#include <stdio.h> #include <stdlib.h> int array_size; int target=6; int counter=0; int temp; void main(){ printf("Enter the quantity of numbers: "); scanf("%d",&array_size); int *arr=(int *)malloc(array_size * sizeof(int)); for(int i=0;i<array_size;i++){ printf("Enter element %d: ",i+1); scanf("%d",&arr[i]); } for (int x=0 ; x <array_size-1 ; x++){ counter++; temp=counter; for(counter; counter < array_size ; counter++){ if ((arr[x]+arr[counter])==target){ printf("\nThe indices are %d %d", x , counter); } else{ counter=temp; } } } free(arr); }
3元素输入时的正常输出
Enter the quantity of numbers: 3 Enter element 1: 1 Enter element 2: 2 Enter element 3: 5 The indices are 0 2
原因说明:数组第一个和第三个元素之和为6(target=6)
问题分析与解决
死循环原因
内层循环逻辑存在致命错误:每当arr[x]+arr[counter]不等于target时,你会把counter重置为temp(当前外层循环x对应的初始counter值)。这会导致内层循环永远无法推进,比如当x=0、temp=1时,只要某次判断不满足,counter就被打回1,下次循环又从1开始,永远到不了array_size,直接陷入死循环。
修复后的代码
移除全局变量counter和temp,改用局部变量控制循环,避免全局变量被随意修改导致逻辑混乱:
#include <stdio.h> #include <stdlib.h> int target = 6; int main(){ int array_size; printf("Enter the quantity of numbers: "); scanf("%d", &array_size); int *arr = (int *)malloc(array_size * sizeof(int)); for(int i = 0; i < array_size; i++){ printf("Enter element %d: ", i+1); scanf("%d", &arr[i]); } // 遍历所有i<j的元素组合,避免重复判断 for (int x = 0; x < array_size; x++){ for(int y = x + 1; y < array_size; y++){ if ((arr[x] + arr[y]) == target){ printf("\nThe indices are %d %d", x, y); } } } free(arr); return 0; }
修复要点
- 去掉全局的
counter、temp、array_size变量,改用局部变量,减少全局变量带来的逻辑干扰 - 内层循环直接从
x+1开始,确保每对元素只判断一次,逻辑更清晰 - 修正
main函数的返回值(标准C中main应返回int类型)
内容的提问来源于stack exchange,提问作者Baran Kahraman
相关产品推荐
相关产品推荐

