【问题标题】:Printing biggest even number with multiple scanf用多个scanf打印最大的偶数
【发布时间】:2018-04-13 05:39:43
【问题描述】:

我想得到最大偶数的输出。但是当我输入1 2 3(3 次调用scanf)时,输出为4

#include <stdio.h>
#include <stdlib.h>

int main() {
    int ary[100];
    int x, y = 0;
    int amount;
    scanf("%d", &amount);
    fflush(stdin);
    for (x = 1; x <= amount; x++) {
        scanf("%d", &ary[x]);
        if (ary[x] % 2 == 0) {
            if (ary[0] < ary[x]) {
                ary[0] = ary[x];
            }
        }
    }
    printf("%d", ary[0]);

    getchar();
    return 0;
}

【问题讨论】:

  • if(ary[0]&lt;ary[x]) 的第一个元素ary[0] 有一个未定义的值。

标签: c arrays loops if-statement scanf


【解决方案1】:

在循环之前初始化ary[0]例如如下方式(否则程序中使用ary[0]的未初始化值)

ary[0] = 1;

然后替换这些 if 语句

    if(ary[x]%2==0)
    {
        if(ary[0]<ary[x])

if( ary[x]%2==0 && ( x == 1 || ary[0]<ary[x] ) )

最后写

if ( ary[0] != 1 ) printf("%d",ary[0]);

考虑到这个调用

fflush(stdin);

有未定义的行为,应该被删除。

其实没有必要声明一个数组。没有数组,程序看起来像

#include <stdio.h>

int main( void )
{
    unsigned int n;
    int max_even = 1;

    printf("How many numbers are you going to enter: ");
    scanf("%u", &n);

    int x;

    for (unsigned int i = 0; i < n && scanf( "%d", &x ) == 1; i++)
    {
        if ((x % 2) == 0 && (max_even == 1 || max_even < x))
        {
            max_even = x;
        }
    }

    if (max_even != 1)
    {
        printf("maximum entered even number is %d\n", max_even);
    }
    else
    {
        puts("None even number was enetered");
    }

    return 0;
}

它的输出可能看起来像

How many numbers are you going to enter: 10
0 1 2 3 4 5 6 7 8 9
maximum entered even number is 8

【讨论】:

    【解决方案2】:

    您的代码不起作用,因为在您第一次将其值与读取的值进行比较时,ary[0] 尚未初始化,此外,对于其他比较而言,它甚至可能不是。

    您应该使用一个指标来告诉您是否看到了偶数。

    这里有一个解决方案:

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(void) {
        int has_even = 0, max_even = 0, value, amount, x;
    
        if (scanf("%d", &amount) != 1)
            return 1;
        for (x = 0; x < amount; x++) {
            if (scanf("%d", &value) != 1)
                break;
            if (!has_even || value > max) {
                max_even = value;
                has_even = 1;
            }
        }
        if (has_even)
            printf("%d\n", max_even);
        else
            printf("no even value\n");
    
        getchar();
        return 0;
    }
    

    【讨论】:

      【解决方案3】:
      #include <stdio.h>
      #include <stdlib.h>
      
      int main() {
       int ary[100];
       int ary[0 = 0;
       int x, y = 0;
       int amount;
       scanf("%d", &amount);
       fflush(stdin);
       for (x = 1; x <= amount; x++) {
          scanf("%d", &ary[x]);
          if (ary[x] % 2 == 0) {
              if (ary[0] < ary[x]) {
                  ary[0] = ary[x];
              }
          }
      }
      printf("%d", ary[0]);
      
      getchar();
      return 0;
      

      }

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多