【问题标题】:Cannot decide about condition in while loop无法确定 while 循环中的条件
【发布时间】:2020-06-02 23:25:48
【问题描述】:

我正在制作一个关于从用户输入“n”个整数并分别计算偶数和奇数和的程序。但是,我对应该放入 while 循环的条件感到困惑。除此之外,偶数和奇数的总和计算得非常完美。

#include <stdio.h>
int main()
{
    int i, n, number, sum = 0, summ = 0, count;
    printf("Enter Number of Integers:");
    scanf("%d", &n);
    while (i <= n)
    {
        i = number;
        printf("Enter Number:");
        scanf("%d", &number);
        i++;
        if (number % 2 == 0)
        {
            sum = sum + number;
            number++;
        }
        else if (number % 2 != 0)
        {
            summ = summ + number;
            number++;
        }
    }
    printf("Sum of Even Numbers: %d", sum);
    printf("\nSum of Odd Numbers: %d", summ);
}

【问题讨论】:

  • i=number; 可能不正确。
  • i 未初始化。
  • While 循环在迭代次数未知的情况下使用,但在您的情况下是n。为什么不使用for 循环呢?此外,您不仅在第一次迭代时将 i 初始化为一个单元化变量,而且在每次迭代中都会覆盖它,因此它不能作为迭代计数器正常工作。
  • 删除 i=number;如果您给出的第一个数字大于整数数,您的总和将是错误的
  • number++; 行相当奇怪——它们应该被删除。您需要for (int i = 0; i &lt; n; i++),这是用于计数0 .. n - 的惯用C 循环。然后丢失i = number; 行和现在无关的i++; 行。您应该测试scanf() 的结果,以确保有人在您希望他们输入-234567 或其他数字时没有输入abcd

标签: c loops while-loop scanf


【解决方案1】:

只需在每个循环中减少 n。 简化你的奇怪测试

#include<stdio.h>
int main()
{
    int n,sum=0,summ=0;
    printf("Enter Number of Integers:");
    scanf("%d",&n);
    while(n-- > 0)
    {
        int number;
        printf("Enter Number:");
        scanf("%d", &number);
        if(number % 2) {
            summ += number;
        }
        else {
            sum += number;
        }
    }
    printf("Sum of Even Numbers: %d\n",sum);
    printf("Sum of Odd Numbers: %d\n",summ);
}

【讨论】:

  • ...并检查scanf的返回值;如果我输入 four 会发生什么?
【解决方案2】:

即使其他答案正确,但对于初学者来说,它们可能过于复杂。我强烈建议使用for 循环来减少混乱。还可以为您的变量提供更好的名称,以便更清楚地了解发生了什么。

#include<stdio.h>

int main()
{
    int n, sum_even = 0, sum_odd = 0, number;

    printf("Enter Number of Integers:");
    scanf("%d", &n);

    for (int i = 0; i < n; i++)
    {
        printf("Enter Number:");
        scanf("%d", &number);

        if (number % 2)
            sum_odd += number;
        else
            sum_even += number;

    }
    printf("Sum of Even Numbers: %d\n", sum_even);
    printf("Sum of Odd Numbers: %d\n", sum_odd);
}

【讨论】:

    【解决方案3】:

    对于初学者来说,最好将保存整数数量的变量声明为 unsigned int 类型。

    例如

    unsigned int n = 0;
    
    printf( "Enter Number of Integers: " );
    scanf( "%u", &n );
    

    然后循环看起来像

    int success = 1;
    
    while ( success && n-- )
    {
        int number;
    
        printf( "Enter Number: " );
        success = scanf( "%d", &number ) == 1;
    
        if ( success )
        {
            if ( number % 2 == 0 ) sum += number;
            else summ += number;
        }
    }
    
    printf( "Sum of Even Numbers: %d\n", sum );
    printf("\nSum of Odd Numbers: %d\n", summ ); 
    

    注意用户可以中断输入。您应该在程序中处理这种情况。

    这是一个演示程序。

    #include <stdio.h>
    
    int main(void) 
    {
        int sum = 0, summ = 0;
        unsigned int n = 0;
    
        printf( "Enter Number of Integers: " );
        scanf( "%u", &n );
    
        int success = 1;
    
        while ( success && n-- )
        {
            int number;
    
            printf( "Enter Number: " );
            success = scanf( "%d", &number ) == 1;
    
            if ( success )
            {
                if ( number % 2 == 0 ) sum += number;
                else summ += number;
            }
        }
    
        printf( "\nSum of Even Numbers: %d\n", sum );
        printf( "Sum of Odd Numbers: %d\n", summ );     
    }
    

    它的输出可能看起来像

    Enter Number of Integers: 10
    Enter Number: 1
    Enter Number: 2
    Enter Number: 3
    Enter Number: 4
    Enter Number: 5
    Enter Number: 6
    Enter Number: 7
    Enter Number: 8
    Enter Number: 9
    Enter Number: 10
    
    Sum of Even Numbers: 30
    
    Sum of Odd Numbers: 25
    

    【讨论】:

      猜你喜欢
      • 2014-06-03
      • 1970-01-01
      • 2023-03-26
      • 2022-12-07
      • 2015-02-27
      • 1970-01-01
      • 1970-01-01
      • 2018-01-21
      • 1970-01-01
      相关资源
      最近更新 更多