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

标签 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. number 在第一次迭代之前未初始化。
  2. scanf 期望参数是一个指针,您传入
  3. 另外,我不认为最小值是 0(负数呢?),并且 最大值不应为 0。
  4. 如果所有数字都相同怎么办?你 没有得到正确的分钟

检查输入结束的方法有很多种,我选择显式使用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;
}

不过,您仍然需要改进错误管理。

关于c - 使用 EOF 循环打印最小值和最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37666027/

相关文章:

c - 如何从c程序获取输入到批处理文件作为返回值

C 指向字符串数组的指针和数组名称消歧

loops - 8086 Assembly - 更好的数据存储/操作?

python - 如何迭代二维坐标中的邻居?

c++ - 使用完全正方形的计数器控制 While 循环

c - XV6: ptable 初始化

c - 在c中初始化一个新结构

Ruby:作为变量的条件不起作用

bash - 将文件中的键/值参数读取到 shell 脚本中

java - do while 循环问题