原型 char * fgets(char * s, int n,FILE *stream);
参数:
s: 字符型指针,指向存储读入数据的缓冲区的地址。
n: 从流中读入n-1个字符
stream : 指向读取的流
为什么C语言读取文件到结构体时为什么整天多读一行?一切都是【!feof(fp)】的错!!!
while (!feof(fp)) {
fgets(buffer, 256, fp);
j++;
}
像这样的代码,是很多C语言学者经常犯的错误!!
feof()这个函数是用来判断指针是否已经到达文件尾部的。
若fp已经指向文件末尾,则feof(fp)函数值为“真”,即返回非零值;否则返回0。
对呀!那有什么问题的呢?
其实feof() 这个函数是当读到文件结束符就返回 true 值,而非到文件最后一个字符,所以当读完文件最后一个字符时,如果后面还有换行或者空格的时候, 他会继续循环。所以就会多把最后循环一次。解决的方法其实很简单!!只需要把fgets放到while哪里判断就OK了!!
while (fgets(buffer, 256, fp)) {
j++;
}
本文深入探讨了使用C语言读取文件时常见的错误——为何会多读取一行文本,并提供了正确的解决方案。文章指出,错误源自feof()函数的误用,该函数在文件结束前一位置即返回真值,导致额外读取。正确做法是在while循环中直接使用fgets()进行条件判断。
1594

被折叠的 条评论
为什么被折叠?



