我正在尝试查找用户输入的最接近的数字对。我的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;
}
答案 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++)