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

C语言入门疑问:为何这段while循环不会无限执行?

关于K&R教材中getline循环终止的问题

为什么while循环不会无限执行?

K&R教材第69页里的getline是书中自定义的函数,并非C标准库的同名函数。它的返回规则很明确:

  • 成功读取一行内容时,返回实际读到的字符数量(包含换行符)
  • 当读取到*文件结束符(EOF)*或发生读取错误时,返回-1

while循环的判断条件是(len = getline(line, MAXLINE)) > 0,一旦getline返回-1,该条件不成立,循环就会终止,不会无限运行。

你对返回值的理解有误:getline不会把行长度“追加”到MAXLINE上,MAXLINE是传入的缓冲区最大容量,用来限制单次读取的字符数,函数返回的是实际读到的字符数,和MAXLINE没有累加关系。

getline返回-1(无法读取行)的场景

主要有两类情况:

  • 触发EOF(文件结束):如果是从终端输入,Unix/Linux下按Ctrl+D、Windows下按Ctrl+Z会触发EOF;如果是读取磁盘文件,当文件指针移动到最后一个字节之后,也会触发EOF。
  • 输入流读取错误:比如磁盘读取故障、输入设备意外断开等异常情况,此时函数会返回-1。

绝大多数正常场景下,都是遇到EOF导致循环终止,这也是程序处理输入的常规逻辑——读完所有输入内容就停止。

内容的提问来源于stack exchange,提问作者Fidgety Meditation

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 19:55:31