我的C程序从用户输入中查找最接近的数字对不打印正确的输出?

时间:2019-03-09 05:04:08

标签: c arrays loops math

我正在尝试查找用户输入的最接近的数字对。我的C代码无法正常工作,我无法弄清楚出了什么问题。我认为这可能与存储值有关,但我不知道从这里去哪里。

#include <stdio.h>
#include <math.h>

int main()
{
    int i, j,arr[50], first,second;

    //loop input
    for(i=0;i<50;i++) //loop 50 times
    {
        scanf("%d", &i); //scan
        //break if i=-1      
        if (i==-1)
            break;
        //if not print    
    }
    //2nd num - 1st num < 3rd num-1st num, closest = 1st and 2nd num
    //i[0]=num1, j[0+i]=2nd num, i= 4 , 5, 7, ans=arr,
    //if j[0+i]-i[0]= ans < j[0+i]-i[i]=ans 
    //arr[i]=8,2,17,4,25
    for(i=0;i<50;i++)
    {
        for(j=i+1;j<50;j++)
        {
            if(arr[j]-arr[i]<arr[j+1]-arr[i])
            {
                first = arr[i];//3
                second = arr[j+1];//5
            }
        }   
    }
    printf("%d %d\n", first, second);

 return 0;

}

2 个答案:

答案 0 :(得分:1)

问题在于这段代码。您正在扫描计数器变量i而不是数组。然后,您将使用数组arr来操纵东西。为什么在任何情况下都可以使用?

 for(i=0;i<50;i++) //loop 50 times
        {
            scanf("%d", &i); //scan
            //break if i=-1      
            if (i==-1)
                break;
            //if not print    
        }

i永远不会是-1,除非这是一个奇迹。

答案 1 :(得分:1)

不要将其发布为答案,而是更喜欢编辑代码。无论如何,问题出在这里:

for (j = i + 1; j < len; j++)//j<i <-why is it wrong?

怎么不错?您已经使用值j初始化了i+1。应该怎么小于i?因此,它从数组外部获取值并为您提供意外的结果。

正确的格式是:

for (j = 0; j < i; j++)