|
|
发表于 2025-10-22 23:18:27
|
显示全部楼层
您遇到的情况是正常的,这与终端输入缓冲机制有关。让我来解释一下原因和解决方案:
原因分析:
- 标准输入默认是行缓冲模式,需要遇到换行符才会提交给程序
- Ctrl+D 在Unix/Linux系统中表示EOF(文件结束符)
- 当您在行中间按Ctrl+D时,终端会立即提交当前行内容,但程序仍在等待更多输入
- 只有当您在空行按Ctrl+D时,才会真正结束输入
解决方案:
- #include <stdio.h>
- #include <ctype.h>
- int main() {
- int c;
- int num = 0, blank = 0, others = 0;
-
- printf("请输入字符(输入完成后按回车,然后在空行按Ctrl+D结束):\n");
-
- while ((c = getchar()) != EOF) {
- if (isdigit(c)) {
- num++;
- } else if (c == ' ' || c == '\t' || c == '\n') {
- blank++;
- } else {
- others++;
- }
- }
-
- printf("数字出现次数: %d\n", num);
- printf("空白符出现次数: %d\n", blank);
- printf("其他字符出现次数: %d\n", others);
-
- return 0;
- }
复制代码
正确的使用步骤:
1. 输入您的文本内容
2. 按 回车 键
3. 在新的一行(空行)按 Ctrl+D
4. 程序会立即输出统计结果
如果您希望实现"即时统计"(每输入一个字符就立即处理),那就需要改变终端的输入模式,但这会涉及更复杂的代码。
现在您应该理解为什么需要先按回车再按Ctrl+D了!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|