C比较数字,存储在数组中,以及打印

时间:2014-03-21 17:55:32

标签: c arrays printing io compare

我需要做的是输入一行数字,例如:

7 5 3 4 1 2

我希望能够扫描并比较每个数字并删除最高和最低,然后重新打印列表(按照原来的顺序)。

示例输出:

5 3 4 2

到目前为止,这是我的代码:

#include<stdio.h>

main( ){
    int low = 10000;
    int high = -10000;
    int current;
    char c;
    int array[6] = { };
    int i = 0;
    scanf( "%i", &low );
    high = low;
    while ( ( c = getchar( ) ) != EOF ){
        scanf( "%i", &current );
        if ( current < low ){
            array[i] = low;
            low = current;
            i++;
        }
        else if ( current > high ){
            array[i] = high;
            high = current;
            i++;
        }
    }
    for ( i = 0; i < 4; i++ ) {
        printf( "%i ", array[i] );
    }
}

我很难找到出错的地方。理论上我的代码是有道理的(顺便说一下我只是启动了C)但是我无法弄清楚为什么它没有正确地存储到数组中以便显示。我得到输出:

7 5 3 0

1 个答案:

答案 0 :(得分:0)

以下代码是您的问题

if(current < low){
  array[i] = low;
  low=current;
  i++;
}
else if(current > high){
  array[i] = high;
  high=current;
  i++;

}

这将旧的高或低置于新的高点或低点的位置。因此,每次找到新的最大值或最小值时,您也会重新排序数组。

您似乎也在奇怪地阅读输入。函数scanf是printf的输入模拟,在相反方向上提供许多相同的转换功能。第一个scanf将7放入低位,getchar拾取空间,然后将5放入低位,将7放入数组中,使其显示为数组中的第一个元素。它无法检测到它应该是最大值。

因为如果你不能获得可能的高点,你就会使用别的东西。因此,您的代码认为4是最大值。

数组的最后一个元素是0,因为while在2之后退出而没有将它放入数组中。因此,这是编译器的工件。除非您明确设置初始值,否则旧版本的C会向您显示发生在内存单元格中的任何内容。