#define MAXLINE 1000
char pattern[] = "ould";
main()
{
char line[MAXLINE];
int found = 0;
while (getline(line,MAXLINE) > 0)
if (strindex(line, pattern) >= 0 ) {
printf("%s", line);
found ++;
}
return found
}
为什么while循环会一直运行下去呢?getline(line,1000)会返回行的长度,然后“append it”(?)到MAXLINE,根据行的长度,得到一个大于1000的数字......为什么会降到零以下呢?
我读到getline在“不成功”时返回-1,那是什么时候?什么时候行不被读取?
这是在Kernighan的第69页,我一直在跳过这本书,现在我正在回溯,看看我错过了什么。
请描述您尝试了什么、您期望发生什么以及实际结果。最少20个字符。
2条答案
按热度按时间hgqdbh6s1#
K&R第二版第69页所示的
getline
版本定义为:由此我们可以看出,函数要继续使用
stdin
流中的字符,必须满足的条件之一是返回的字符不等于常量值EOF
。EOF
或end-of-file表示不再有数据要从流中读取。有关其他详细信息,请参见What is EOF in the C programming language?。如果
getchar
在getline
中第一次调用时返回EOF
,则i
的增量永远不会超过0
,并且函数将返回零。此版本的
getline
无法返回-1
。你表现出的状况
将导致此循环在返回值 * 小于 * 或 * 等于 * 零时停止。换句话说,当
getline
指示未读取任何数据时。ttygqcqt2#
我假设您使用的是书中定义的
getline
和strindex
:正如你所看到的
getline
读取,直到它到达文件结束(EOF).如果你是在命令行运行程序,你的程序正在等待这个信号从标准,你可以通过按下Control-d手动发送这个信号.如果你把一个文件装入程序:
它发送的文件结束值,位于文件的末尾。