在线编译器 C

#include <stdio.h> int main() { int input,sum=0,num=0; scanf("%d",&input); while(input!=0){ scanf("%d",&input); if(input>0){ sum=sum+input;} if(input<0){ num++; } } printf("%d %d",sum,num); return 0; }
这段代码的功能是:不断读取整数,直到输入0为止,然后输出所有正数的和以及负数的个数。

代码存在一个逻辑问题:第一个输入的数字没有被正确处理。程序在循环开始前读取了一次`input`,但循环条件检查后立即又读取一次,导致第一个数字被跳过,没有参与正数求和或负数计数。

- 检查循环开始前读取的第一个数字是否被用于判断和累加。当前代码在进入循环前读取了第一个数,但循环体内又立即读取下一个数,第一个数实际上被忽略了。
- 考虑如何调整读取顺序,使得每个输入的数字(包括第一个)都能被正确判断正负并处理,直到遇到0为止。