gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 17:36:50 25 4
gpt4 key购买 nike

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

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

最佳答案

以下代码是您的问题

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

}

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

您读取输入的方式似乎也很奇怪。函数 scanf 是 printf 的输入模拟,在相反方向提供许多相同的转换设施。第一个 scanf 将 7 放入 low,getchar 拾取空间,然后将 5 放入 low,将 7 放入数组,因此它显示为数组中的第一个元素。它无法检测到它应该是最大值。

因为你使用了 else if 你不会得到可能的高点,直到某些东西不可能成为可能的低点。因此,您的代码认为 4 是最大值。

数组的最后一个元素是0,因为while在2之后退出,没有将其放入数组中。因此,这是编译器的产物。旧版本的 C 会向您显示内存单元中发生的任何情况,除非您显式设置初始值。

关于C 比较数字,存储在数组中,并打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22566100/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com