为何需在循环条件中加入EOF?无数组输入写入文件问题咨询
为什么添加
&& ch != EOF能解决你的无限循环问题? 嘿,我来帮你把这个问题拆解得明明白白的~
首先得搞懂getchar()这个函数到底返回什么:
- 当你从键盘输入字符时,它会返回对应字符的ASCII值(转换为int类型);
- 当输入流结束的时候——比如你在终端按下
Ctrl+D(Linux/macOS)或Ctrl+Z(Windows),或者程序读取的是文件且已经读到末尾——它会返回一个特殊的标记:EOF(全称End Of File,文件结束符),这个值在C标准库中被定义为-1(因为普通字符的ASCII值都是0-127的非负数,不会和-1冲突)。
接下来看你的问题:
你原来的循环大概是类似这样的:
while((ch = getchar()) != '某个终止条件') { // 写入文件的逻辑 }
当输入流结束时,getchar()会一直返回EOF,而EOF不等于你设置的终止条件(比如可能是换行符?),所以循环条件永远为真,getchar()每次调用都会立刻返回EOF,循环就陷入了无限跑的状态。
而添加&& ch != EOF之后,循环条件变成了:
while((ch = getchar()) != '某个终止条件' && ch != EOF) { // 写入文件的逻辑 }
这时候,只要getchar()返回EOF,第二个条件ch != EOF就会不成立,整个循环条件就为假,循环会立刻终止,完美解决了无限循环的问题。
最后给你个小提醒:一定要把ch定义成int类型,而不是char类型!因为EOF是int类型的-1,如果用char存储,可能会因为符号位的问题(比如你的系统中char是有符号的),导致-1被转换成某个普通字符,这时候ch != EOF的判断就会失效,又会出现奇怪的问题。
内容的提问来源于stack exchange,提问作者8TrackRobot
相关产品推荐
相关产品推荐

