【发布时间】:2021-09-30 00:04:57
【问题描述】:
我试图做一个while循环从标准输入读取一些字符串,但它永远不会结束
fgets(string,stringlenght,stdin);
while (string[0] != '\0') {
///some stuff here
fgets(string,stringlenght,stdin);
}
现在,无论我做什么,循环都不会结束,我尝试使用 ctrl+d 和 ctrl+z 但两者都没有工作。 这样的循环如何结束?
【问题讨论】:
-
请记住
fgets()保留换行符(如果数组中有空间)。所以一个“空字符串”将是"\n"。 -
while(fgets(...)) {...} -
@interjay 在这里有正确的答案:您必须检查来自
fgets()的 返回值 来确定 EOF,而不是检查缓冲区来确定。 -
您错过的是,当您到达文件末尾并且
fgets()无法读取更多数据时,它将旧数据留在缓冲区中。您读取数据的任何缓冲区的内容永远不会可靠地告诉您以任何方式读取数据的尝试是否有效。这就是返回值的作用。
标签: c string while-loop stdin fgets