Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何在数组中查找与整数和数字之间最接近的两个差_C_Arrays - Fatal编程技术网

C 如何在数组中查找与整数和数字之间最接近的两个差

C 如何在数组中查找与整数和数字之间最接近的两个差,c,arrays,C,Arrays,我的代码的目标是获得数组中的数字和整数之间最接近的两个差。这是我的密码 #include <stdio.h> int main() { int kilometre, exit_gas[7]={90,95,116,150,300,377,677},i,distance; distance=(kilometre-exit_gas[0]); printf("Enter your kilometre reading:"); scanf("%d",&kilometre); for(j=

我的代码的目标是获得数组中的数字和整数之间最接近的两个差。这是我的密码

#include <stdio.h>
int main()
{
int kilometre, exit_gas[7]={90,95,116,150,300,377,677},i,distance;
distance=(kilometre-exit_gas[0]);
printf("Enter your kilometre reading:");
scanf("%d",&kilometre);
for(j=1;j<8;++j){
    if(abs(kilometre-exit_gas[j])<distance){
        distance=abs(kilometre-exit_gas[j]);
        printf("%d\n",distance);
    }
}
return 0;
}
所需输出应为:

149
1

我知道我得到的是
204183
,因为它们也满足了限制
if(abs(km-exit_gas[j])我不明白你是如何得到你帖子中显示的结果的,因为我得到了另一个结果。尽管如此,程序可以按照以下方式运行

#include <stdio.h>
#include <stdlib.h>

int main(void) 
{
    int exit_gas[] = { 90, 95, 116, 150, 300, 377, 677 };
    const size_t N = sizeof( exit_gas ) / sizeof( *exit_gas );
    size_t i;
    int kilometre;
    unsigned int first, second;

    printf( "Enter your kilometre reading: " );
    scanf( "%d", &kilometre );

    for ( i = 0; i < N; i++ )
    {
        unsigned int distance = abs( kilometre - exit_gas[i] );
        if ( i == 0 || distance < first )
        {
            if ( i != 0 ) second = first;
            first = distance;
        }
        else if ( i == 1 || distance < second )
        {
            second = distance;
        }
    }

    printf( "%u\n", first );
    printf( "%u\n", second );

    return 0;
}

每次找到更好的匹配项时,您都会打印出距离值。将
printf()
移动到for()循环之后的某个位置,这样您只打印最终结果,而不是所有中间结果。
distance=(km-exit_gas[0]);
读取未初始化的
km
(可能缺少
abs
)@yushay bohra我不明白你是怎么得到这个结果的:204 183 149 1@Vlad来自莫斯科号码:95和116也满足限制,所以204是299-95,183是299-116修正AlexD说的…然后在循环后移动printf行?
#include <stdio.h>
#include <stdlib.h>

int main(void) 
{
    int exit_gas[] = { 90, 95, 116, 150, 300, 377, 677 };
    const size_t N = sizeof( exit_gas ) / sizeof( *exit_gas );
    size_t i;
    int kilometre;
    unsigned int first, second;

    printf( "Enter your kilometre reading: " );
    scanf( "%d", &kilometre );

    for ( i = 0; i < N; i++ )
    {
        unsigned int distance = abs( kilometre - exit_gas[i] );
        if ( i == 0 || distance < first )
        {
            if ( i != 0 ) second = first;
            first = distance;
        }
        else if ( i == 1 || distance < second )
        {
            second = distance;
        }
    }

    printf( "%u\n", first );
    printf( "%u\n", second );

    return 0;
}
1
78