c - 使用 switch case 的奇数和偶数

标签 c

我想打印该值及其类型

输入:

1
3
5
78
10

输出:

Odd 1
Odd 3
Odd 5
Even 78
Odd 11
#include <stdio.h>

int main()
{
    int a[4],b,c;


    for(b=0 ; b<=4 ; b++)
    {
        scanf("%d",&a[b]);
    }
    for (c=0 ; c<=4 ; c++)
    {
            switch (a[c]%2)
            {
                case 0 :
                    printf ("Even %d\n",a[c]);
                    break;
                case 1 :
                    printf ("Odd %d\n",a[c]);
                    break;

            }
    }

    return 0;
}

为什么最后的输出是Odd 11而不是Even 10

最佳答案

只需a[4] 的声明更改为a[5] 即可获得正确的程序。迭代的边界是正确的。

运行代码时会发生的情况是,前四个输入值进入数组 a[4] ,第五个输入值进入分配的变量 b在你的情况下,就在数组后面。这是一个编程错误,并会给出不可预测的结果,具体取决于编译器如何分配内存。

就您的情况而言,我们可以得出结论,变量 b 存储在数组 a[4] 后面,并且在将第五个元素存储到数组中后递增一次你认为是数组。发生这种情况的地方是 for 循环的 b++ 语句。

我无法重现此行为,因为我的编译器可能不会立即在 a[4] 之后分配 b

关于c - 使用 switch case 的奇数和偶数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59864843/

相关文章:

objective-c - 什么比例,从像素到米将是最好的和更可取的?

c++ - 在 C++ 中删除多维结构会导致访问冲突

c - 如何忽略定义指令?

c++ - 如何在 gdb 中打印长字符串的完整值?

c - 8 回溯难题

c - 使用 FFTW 的线程段错误

c - 第二个字符串没有被扫描

c - 互斥锁定和解锁功能如何防止 CPU 重新排序?

c - 链表段错误

c++ - 我应该使用静态工作池还是动态工作池(线程)?