【问题标题】:advice on getting the max and min values from a continues scanf?关于从 continue scanf 获取最大值和最小值的建议?
【发布时间】:2015-12-15 22:59:06
【问题描述】:

我正在尝试从连续的 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);
}

【问题讨论】:

  • 始终检查scanf 和其他可能遇到错误的函数的结果!
  • 注意:代码应该初始化a,f,z。想想如果输入是“1”、“1”、“1”、“-1”会发生什么?

标签: c loops nested max min


【解决方案1】:

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

此外,最小数字将始终是您输入以跳出循环的最后一个数字。您可能想在scanf 之后立即进行检查。

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

【讨论】:

    【解决方案2】:

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

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

    我会让你自己计算出最小/最大逻辑,但这里有一个数字输入的框架,它在输入结束或任何非数字或负输入时停止:

    #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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多