我需要做的是输入一行数字,例如:
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", ¤t );
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
答案 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会向您显示发生在内存单元格中的任何内容。