C语言中如何忽略指定整数输入?在线编程题求解
解决忽略指定整数的求和问题
嘿,我来帮你揪出代码里的问题!你的思路方向是对的,但几个关键细节没处理好,导致第二个样例没通过,咱们一步步来梳理:
1. 求和变量未初始化
你定义了int num,sum;但没给sum赋初始值,它一开始会是内存里的随机垃圾值,这直接会导致最终求和结果错乱,这是新手很容易踩的小坑~
2. 条件判断逻辑完全错误
你的判断语句if(num != 1 || 0 )完全不符合预期:
- 这个表达式等价于
(num !=1) || 0,意思是只要num不等于1就会执行求和,既没排除0和10,逻辑或的用法也完全错了。 - 正确逻辑应该是:当num不是1、不是0、也不是10的时候,才把它加到sum里,对应的条件是
if(num != 1 && num != 0 && num != 10)
3. 循环终止条件不可靠
你用while(ch != 10)判断输入结束,但10是换行符的ASCII值,可输入里的分隔符可能是空格、制表符,而且如果输入不是以换行结束(比如重定向输入),这个循环就会出问题。更可靠的方式是用scanf的返回值:scanf("%d", &num)成功读取一个整数时会返回1,没有更多输入时返回EOF,所以循环可以写成while(scanf("%d", &num) != EOF),这样不管输入怎么结束都能正确处理。
修正后的完整代码
#include <stdio.h> // 别忘了加标准输入输出头文件,很多编译器需要这个 int main() { int num, sum = 0; // 初始化sum为0,这步很关键 // 用scanf的返回值判断是否还有输入 while(scanf("%d", &num) != EOF) { // 同时排除1、0、10三个数 if(num != 1 && num != 0 && num != 10) { sum += num; } } printf("%d", sum); return 0; }
验证样例
- 样例输入1:
1 -184,代码会忽略1,把-184加到sum里,输出-184,符合要求。 - 样例输入2:
10 439 298 -935 72 636 774 -509 -568 228 47,忽略10后,计算剩下的数的和:439+298-935+72+636+774-509-568+228+47 = 482,完全匹配样例输出。
另外补充个小细节:原代码里的main()最好写成int main(),这是C标准规定的写法,兼容性更好~
内容的提问来源于stack exchange,提问作者Rach
相关产品推荐
相关产品推荐

