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
相关产品推荐
相关产品推荐

