Online Compiler C

#include <stdio.h> int main() { int n, count = 0; while (scanf("%d", &n) != 0) { count++; } printf("%d", count); return 0; }
这段代码试图统计输入中整数的个数,但存在一个关键问题:`scanf` 的返回值判断条件不正确。

- `scanf` 在成功读取一个整数时返回 1,在遇到文件结束或输入错误时返回 0 或 EOF。你的循环条件 `!= 0` 会导致循环在读取失败时继续执行,而不是停止。
- 当输入结束时(例如在终端中按 Ctrl+D 或 Ctrl+Z),`scanf` 返回 EOF(通常为 -1),此时 `!= 0` 仍然成立,循环会继续尝试读取,导致无限循环或错误计数。

- 思考一下:`scanf` 返回什么值表示成功读取?什么值表示输入结束?应该用哪个条件来正确终止循环?
- 另外,如果输入中包含非数字字符,`scanf` 会返回 0,此时循环也会陷入死循环。考虑如何同时处理文件结束和输入错误的情况。