C语言奇偶统计程序异常求助:输出超大数值问题排查
解决你的C语言奇偶统计程序问题
嘿,折腾了好几个小时还没搞定肯定挺闹心的,别着急,咱们来把问题一个个揪出来:
你的代码里有两个核心错误:
- 奇偶判断逻辑完全错了:你用
num/2 == 0来判断偶数,这根本不对。整数除法里,比如4/2结果是2(不是0),3/2结果是1(也不是0),这会导致所有数都被判定为奇数,逻辑完全颠倒。判断奇偶应该用取模运算符%——它会返回除法的余数,偶数对2取模余数是0,奇数则是1,这才是正确的判断方式。 - 输出时错误传递了变量地址:你在
printf里写的是&num1、&even,&是取地址运算符,你输出的其实是变量在内存中的地址值,这就是为什么会出现超大数值的原因!应该直接写变量名,比如num1、even。
修正后的完整代码:
#include <stdio.h> #include <stdlib.h> int main() { int num1; int num2; int num3; int num4; int num5; int odd = 0; int even = 0; printf("Input the first integer.\n"); scanf("%i", &num1); printf("Input the second integer.\n"); scanf("%i", &num2); printf("Input the third integer.\n"); scanf("%i", &num3); printf("Input the fourth integer.\n"); scanf("%i", &num4); printf("Input the fifth integer.\n"); scanf("%i", &num5); if (num1 % 2 == 0) { printf("%i is even.\n", num1); even++; } else { printf("%i is odd.\n", num1); odd++; } if (num2 % 2 == 0) { printf("%i is even.\n", num2); even++; } else { printf("%i is odd.\n", num2); odd++; } if (num3 % 2 == 0) { printf("%i is even.\n", num3); even++; } else { printf("%i is odd.\n", num3); odd++; } if (num4 % 2 == 0) { printf("%i is even.\n", num4); even++; } else { printf("%i is odd.\n", num4); odd++; } if (num5 % 2 == 0) { printf("%i is even.\n", num5); even++; } else { printf("%i is odd.\n", num5); odd++; } printf("%i numbers are even.\n", even); printf("%i numbers are odd.\n", odd); return 0; // 加上main函数的返回值,更符合C语言标准 }
额外小建议:
其实你可以用循环+数组来简化代码,不用重复写5段几乎一样的判断逻辑,比如把5个整数存到数组里,然后循环遍历处理,这样代码会更简洁易维护,不过这是进阶内容啦,先把当前问题解决就好~
内容的提问来源于stack exchange,提问作者Lewis Roberts
相关产品推荐
相关产品推荐

