
在 C 语言的世界里,连续输入处理是一项基础且重要的技能,尤其是当我们需要持续接收用户输入直到结束(EOF)时,while(scanf("%c",&ch)!=EOF) 这种结构就成了关键工具。今天,我们就来深入聊聊它的用法、原理和实际场景。
EOF(End Of File)是 “文件结束” 的缩写,它不是一个实际的字符,而是一个表示输入结束的标志。在键盘输入中,我们可以通过 Ctrl+Z(Windows)或 Ctrl+D(Linux、Mac)来触发 EOF。
while(scanf("%c",&ch)!=EOF) 工作原理scanf("%c",&ch) 的返回值是成功读取的项目数。当我们输入一个字符时,scanf 成功读取 1 个项目,返回 1;当遇到 EOF 时,scanf 返回EOF(一个宏定义,通常为 - 1)。因此,while(scanf("%c",&ch)!=EOF) 会不断循环,直到用户触发 EOF 才停止。
以 “判断输入字符是否为字母” 为例,我们来演示连续输入的实现:
c
运行
#include <stdio.h>
int main() {
char ch = 0;
// 持续读取字符,直到遇到EOF
while (scanf("%c", &ch) != EOF) {
// 过滤换行符(因为输入字符后按回车,会传入'\n')
if (ch == '\n') {
continue;
}
// 判断是否为字母(大写或小写)
if ((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z')) {
printf("%c is an alphabet.\n", ch);
} else {
printf("%c is not an alphabet.\n", ch);
}
}
return 0;
}while(scanf("%c",&ch)!=EOF) 实现连续输入,直到用户触发 EOF。if (ch == '\n') continue; 是为了过滤输入时的换行符(\n),避免其干扰判断逻辑。