做一个练习,从用户那里取5个整数,并仅将奇数相加。一切都正确加起来,直到最后一个数字由于某种原因弄乱了一切:
Code and Test
#include <stdio.h>
int main() {
int userNum[5];
int i;
int sum = 0;
for (i = 1; i <= 5; ++i) {
printf("Please enter number %d:\n", i);
scanf("%d", &userNum[i]);
if (userNum[i] % 2 > 0) {
sum = sum + userNum[i];
}
}
printf("The sum of all odd integers is: %d", sum);
return 0;
}
最佳答案
您正在将5个数字读入数组元素userNum[1]
至userNum[5]
,但是由于数组索引在C中从0开始,因此userNum[5]
不存在,并且当程序尝试存储数字到末尾时,该程序具有未定义的行为的数组。其他一些变量被修改,输出为伪造的。未定义的行为实际上可能会带来更糟糕的后果,例如,伪造的候选人以比他的对手更少的选票赢得选举:)
这是更正的版本:
#include <stdio.h>
int main() {
int userNum[5];
int i;
int sum = 0;
for (i = 0; i < 5; ++i) {
printf("Please enter number %d:\n", i + 1);
if (scanf("%d", &userNum[i]) != 1) {
printf("invalid input\n");
return 1;
}
if (userNum[i] % 2 > 0) {
sum = sum + userNum[i];
}
}
printf("The sum of all odd integers is: %d\n", sum);
return 0;
}