在线编译器 C

#include <stdio.h> int main() { int a, b = 0; scanf("%d", &a); while (scanf("%d", &a), a != 0) { b++; } printf("%d", b); return 0; }
这段代码的作用是:从输入中读取整数,每读到一个非零值就将计数器b加1,直到读到0为止,最后输出非零数字的个数。

代码有一个关键问题:第一个`scanf`读取的值被直接丢弃了,没有计入计数器。

- 第一个`scanf`读取的值没有被处理,如果第一个数不是0,它应该被计数,但代码中直接跳过了。
- 循环条件中的逗号表达式会先读取新值赋给a,再判断a是否为0,这意味着每次循环开始时读取的新值才会被判断,而之前的值已经处理过了。