C 程序 for 循环以未知计数的零结束

-1 c loops for-loop undefined-behavior variable-length-array

问题如下:

使用以写入 0 结尾的 for 循环,计算偶数之和、奇数之和,

我不知道为什么我的代码不起作用:

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

int main() {
    int i = 0, num[i], sum, even, odd;
        
    for (;;) {
        printf("Write a number: ");
        scanf("%d", &num[i]);
        if (num[i] == 0) {
            break;
        }
        if (num[i] % 2 == 0) {
            even += num[i];
        } else
            odd += num[i];
            i++;
        }
       
        printf("Sum of even is: %d\n", even);
        printf("Sum of odd is: %d", odd);
        return 0;
    }
Run Code Online (Sandbox Code Playgroud)

Vla*_*cow 6

具有零个元素的数组的声明

int i=0,num[i],sum,even,odd;
Run Code Online (Sandbox Code Playgroud)

调用未定义的行为。

实际上没有任何理由使用数组来完成此任务。

您还需要初始化变量 Even 和 odd。也不使用变量 sum。

例如,该程序可以通过以下方式查找

#include <stdio.h>

int main( void ) 
{
    int even = 0, odd = 0;

    while ( 1 )
    {
        printf( "Enter a number (0 - stop): " );

        int num;

        if ( scanf( "%d", &num ) != 1 || num == 0 ) break;

        if (num % 2 == 0)
        {
            even += num;
        }
        else 
        {
            odd += num;
        }
    }

    printf( "Sum of even is: %d\n", even );
    printf( "Sum of odd is: %d", odd );
}
Run Code Online (Sandbox Code Playgroud)

如果要使用数组,那么您需要声明一个具有固定数量元素的数组并限制输入数量。或者您需要分配和重新分配动态分配的数组。但这会使您的程序因冗余代码而变得更加复杂。

  • @Hogan 我按照你所说的更改了代码。:) (2认同)