我想打印该值及其类型
输入:
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/