我正在研究 K&R “The C Programming Language”第 2 版书,在第 29 页的第 1.9 章字符数组中,有一个示例程序可以在阅读一组行后打印出最长的行。在程序中getline()
提供了一个示例函数,该函数中有一个 for 循环,用于读取字符并检查其有效性,如果有效则将其添加到字符数组中。for 循环给出为
for (i = 0; i < lim - 1 && (c = getchar()) != EOF && c != '\n'; ++i)
s[i] = c;
(c = getchar()) != EOF
我的问题是:之前评估了哪些保证c != '\n'
?
在我之前对 C 的了解中,关联性的顺序与评估的顺序不同,并且 C 标准没有指定评估的顺序。如果是这样,如果c != '\n'
之前评估过会发生什么(c = getchar()) != EOF
?它应该用前一个字符而不是当前读取的字符来检查换行符,因为getchar()
操作是在检查换行符之后完成的,对吧?
快速谷歌搜索表明这种代码是常见的,所以我怀疑如果我自己尝试它会起作用。该书还声称所有示例程序都是工作程序。
什么保证了(c = getchar()) != EOF
之前的评价c != '\n'
?