You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于未读取外部文件时EOF工作机制的技术问询

关于K&R那段输入复制代码的EOF触发问题

哈哈,这个坑我刚学C的时候也踩过!你提到的这段经典K&R代码:

#include <stdio.h>
main() { int c; while ((c = getchar()) != EOF) putchar(c); }

确实是实现“输入啥就输出啥”的功能,但你遇到的情况太正常了——当你在终端手动敲内容时,输入流不会因为你停手就自动触发EOF,因为终端默认是行缓冲模式,它得等你明确告诉它“我输入完了”才会给程序传递EOF信号。

为啥输入停了循环还不停?

你在终端输入的内容会先存在系统的缓冲区里,getchar()是从这个缓冲区里读数据的。如果只是停止输入,程序会一直等着你继续敲内容,根本不知道你已经不想输入了。只有当系统收到明确的EOF指令,才会让getchar()返回EOF值,循环才会终止。

怎么手动发送EOF信号?

不同操作系统的操作不一样:

  • Windows:在终端里按下 Ctrl + Z,然后敲回车,就能发送EOF。
  • Linux/macOS/Unix:直接按下 Ctrl + D 就行,不用回车,按下去程序就会终止。

额外说一句

要是你用这段代码读外部文件,比如通过命令行重定向输入(比如 ./your_program < test.txt),那文件读完的时候系统会自动触发EOF,程序会正常结束,不用手动发信号。文档里说的“输入结束时循环终止”其实包含了这种文件输入的情况,而咱们手动在终端输入属于交互式输入,就得主动告诉系统“我输完了”才行。

内容的提问来源于stack exchange,提问作者Agrudge Amicus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:31:11