使用EOF循环打印最小和最大值

时间:2016-06-06 20:09:52

标签: c loops while-loop max min

我在编写从标准输出中读取实数的C程序时遇到困难,并确定该数字是否与之前读取的所有其他数字相比是最大值还是最小值。程序应该读取另一个实数,直到EOF发生。以下是我对此问题的尝试:

#include <stdio.h>
int main()
{
    double maximum = 0, minimum = 0, number;
    while (number != EOF) {
        printf("Enter a number: ");
        scanf("%lf", &number);
        printf("%d", EOF);
        if (number > maximum) {
            maximum = number;
        }
        else if (number < minimum) {
            minimum = number;
        }
    }
    printf("\n Max number is: %lf", maximum);
    printf("Min number is: %lf", minimum);
    return 0;
}


挑战是我不允许使用数组。

1 个答案:

答案 0 :(得分:1)

您的代码存在以下问题:

  1. number在第一次迭代之前未初始化。
  2. scanf期望参数为指针,传递
  3. 另外,我不认为最小值为0(负面情况怎么样?),而且 最大值不应为0.
  4. 如果所有数字相同怎么办?你&#39; d 没有得到正确的分钟
  5. 有很多方法可以检查输入结束,我选择明确使用feof

    尝试类似这样的代码:

    #include <float.h>
    #include <stdio.h>
    int main()
    {
        double maximum = -DBL_MAX, minimum = DBL_MAX, number;
        while (!feof(stdin)) {
            printf("Enter a number: ");
            scanf("%lf", &number);
            if (number > maximum) {
                maximum = number;
            }
            if (number < minimum) {
                minimum = number;
            }
        }
        printf("\n Max number is: %lf", maximum);
        printf("Min number is: %lf", minimum);
        return 0;
    }
    

    但是,您还需要改进错误管理。