关于从连续扫描中获取最大值和最小值的建议?

advice on getting the max and min values from a continues scanf?

我正在尝试从连续 scanf 中获取最大和最小数字,但我似乎无法计算出来。我超过了时间限制。在我开始学习 C 语言时,我需要尽可能简单地完成它。有什么建议吗?

#include <stdio.h>

int main(void) {

    int a,b,z,f;
    b=1;

    while(a > -1){
        scanf("%i", &a);
        //printf("%i", a);

        if((b>a)){
            z=a;
        }

        if((b<a)){
            f=a;
        }

        b=a;
    }
    printf("Maximum number is: %i\n", f);
    printf("Minimum number is: %i", z);
}

您永远不会在 while 循环开始之前初始化 a。声明时设置为0。

此外,最小数字将始终是您输入的最后一个数字以跳出循环。您可能想在 scanf.

之后立即进行检查

您也没有对当前的最小值和最大值进行适当的检查。您应该根据 zf 检查 a,而不是 b,并且 fz 需要初始化为正确的起始值。当你这样做时,将 z 更改为 min 并将 f 更改为 max 以便它们更具描述性。

如果到达输入的末尾,a 未转换且未定义,但它很可能保留其旧值并且条件可能永远不会变为假。 scanf returns 一个值:转换的项目数或特殊值 EOF 如果已到达输入末尾。使用它。

当您第一次使用 a 时,它是未初始化的,很可能是负数。您的算法也不正确。它没有找到最小和最大数字,它测试有多少数字大于前一个数字以及有多少数字小于第一个数字的奇怪结果。

我会让你自己解决 min/max 逻辑,但这里有一个数字输入的框架,它在输入结束或任何非数字或负输入时停止:

#include <stdio.h>

int main(void)
{
    int a;

    while (scanf("%i", &a) == 1 && a > -1) {
        // process a
    }

    printf("Max: %i\n", amax);
    printf("Min: %i\n", amin);

    return 0;
}