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

数组输入超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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 04:43:24