[英]Reading text-file until EOF using fgets in C
在C中使用fgets读取文本文件直到EOF的正确方法是什么? 现在我有了这个(简化):
char line[100 + 1];
while (fgets(line, sizeof(line), tsin) != NULL) { // tsin is FILE* input
... //doing stuff with line
}
具体来说,我想知道是否应该有其他东西作为时间条件? 从文本文件到“行”的解析是否必须在while条件下执行?
根据参考
成功时,函数返回str 。 如果在尝试读取字符时遇到文件结尾,则设置eof指示符(feof)。 如果在读取任何字符之前发生这种情况,则返回的指针是空指针 (并且str的内容保持不变)。 如果发生读取错误,则设置错误指示符(ferror)并返回空指针(但str指向的内容可能已更改)。
因此检查返回值是否为NULL
就足够了。 解析也进入了while-body。
你所做的是100%好,但你也可以简单地依靠fgets
的返回作为测试本身,例如
char line[100 + 1] = ""; /* initialize all to 0 ('\0') */
while (fgets(line, sizeof(line), tsin)) { /* tsin is FILE* input */
/* ... doing stuff with line */
}
为什么? fgets
将在成功时返回指向line
的指针,或在失败时返回NULL
(无论出于何种原因)。 有效的指针将测试为true
,当然, NULL
将测试为false
。
( 注意:你必须确保该line
是在作用域中声明的字符数组 ,使用sizeof line
作为长度。如果line
只是指向数组的指针,那么你只读取sizeof (char *)
字符)
我有同样的问题,我以这种方式解决了它
while (fgets(line, sizeof(line), tsin) != 0) { //get an int value
... //doing stuff with line
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.