Online Compiler C

#include <stdio.h> int main() { int num; int sum_positive = 0; // 记录正数的和 int count_negative = 0; // 记录负数的个数 // 循环读取数字,直到读到 0 为止 while (scanf("%d", &num) == 1 && num != 0) { if (num > 0) { sum_positive += num; // 如果是正数,累加到和里 } else if (num < 0) { count_negative++; // 如果是负数,计数器加 1 } } // 按照题目要求的格式输出,中间用空格隔开 printf("%d %d\n", sum_positive, count_negative); return 0; }
这段代码的功能是:从输入中不断读取整数,直到遇到0为止,然后输出所有正数的和以及负数的个数。

代码逻辑基本正确,但有一个细节需要注意:

- 当输入的第一个数字就是0时,循环条件 `num != 0` 会直接不满足,循环一次都不执行。此时 `sum_positive` 和 `count_negative` 都是初始值0,输出会是 "0 0",这可能是符合要求的。

- 但考虑一种情况:如果输入中包含了非数字的内容(比如字母),`scanf` 会返回0,循环也会结束。此时程序不会输出任何结果,因为循环结束后直接执行了 `printf`,但 `sum_positive` 和 `count_negative` 仍然是初始值0,输出 "0 0"。这可能是合理的,但需要确认题目是否要求处理非数字输入。

- 提示1:检查当输入的第一个数字就是0时,程序是否按照题目要求输出了正确的结果?题目可能要求在这种情况下输出什么?

- 提示2:如果题目要求输入中只包含整数,那么代码没有问题。但如果题目要求处理输入中可能包含非数字的情况,需要思考 `scanf` 返回0时应该如何处理。