fgets()为什么会读取文件最后一行两次?(转载)

我们在读取文件时,书中经常提到的逻辑是这样的,但这是错误的!

while(!feof(Fp))
{

fgets(readLine,10000,Fp);

//do something.

}

 

原因在于feof()只有在你尝试读取文件结尾之后,才会返回true。也就是说,feof()只解释上次文件读写是否到达结尾,而不是下一次。

 

所以正确的逻辑应该是这样的。

while(true) {
fgets(readLine,10000,Fp);
if( feof(Fp) ) break;
do something.
}

转载于:https://www.cnblogs.com/huminiceblog/articles/3753392.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用fgets()函数读取文件一行数据,然后再调用fgets()函数读取下一行数据,以此类推,即可实现跳过前两行的效果。 以下是一个示例代码: ```c #include <stdio.h> int main() { FILE *fp; char buffer[256]; fp = fopen("file.txt", "r"); // 打开文件 if (fp == NULL) { printf("无法打开文件\n"); return 1; } // 读取并忽略前两行 fgets(buffer, 255, fp); fgets(buffer, 255, fp); // 读取剩余内容 while (fgets(buffer, 255, fp)) { printf("%s", buffer); } // 关闭文件 fclose(fp); return 0; } ``` 在上面的代码中,首先打开文件并检查是否成功打开。然后,通过两次调用fgets()函数,读取并忽略前两行数据。最后,使用一个while循环来读取文件剩余的内容,并输出到控制台。最后,关闭文件并返回0表示程序运行成功。 ### 回答2: 使用fgets函数读取文件并跳过前两行的方法如下: 1. 首先,打开要读取的文件,并创建一个文件指针用于指向该文件。例如,我们可以使用以下代码打开文件并创建文件指针: ```c FILE *fp; fp = fopen("filename.txt", "r"); // "filename.txt"是要读取的文件名 ``` 2. 然后,创建一个字符数组或字符指针来存储每行读取的内容。例如,我们可以使用以下代码创建一个字符数组来存储每行读取的内容: ```c char line[100]; ``` 3. 使用fgets函数循环读取文件中的每一行。通过读取并丢弃前两行,达到跳过前两行的目的。例如,我们可以使用以下代码来实现该操作: ```c int lineCount = 0; while (fgets(line, sizeof(line), fp) != NULL) { lineCount++; if (lineCount > 2) { // 执行你想要的操作,例如打印出读取的每一行内容 printf("%s", line); } } ``` 4. 最后,关闭文件。使用fclose函数来关闭已打开的文件。例如: ```c fclose(fp); ``` 通过上述步骤,可以使用fgets函数读取文件并跳过前两行。具体操作可以根据需求进行相应的修改和扩展。 ### 回答3: 使用fgets函数读取文件时,可以通过跳过前两行的方式实现。 首先,打开文件并将其绑定到一个指针上。可以使用标准库函数fopen来完成此操作。例如,可以使用以下方式绑定文件,并将文件指针赋值给一个指针变量fptr: FILE *fptr = fopen("filename.txt", "r"); 接下来,可以使用fgets函数逐行读取文件fgets函数的原型如下: char *fgets(char *str, int n, FILE *stream); 其中,参数str是用于存储读取字符串的缓冲区;参数n是读取的字符串的最大长度;参数stream是文件指针,指定要从中读取字符串的文件。 在这里,我们需要使用fgets函数读取两行并将它们跳过。可以使用一个循环来实现这个过程。在循环中,可以使用一个计数器变量来跟踪当前读取的行数,当计数器小于2时执行fgets读取操作,并且不对读取的内容进行任何处理。代码示例如下: char buffer[255]; // 存储读取的字符串的缓冲区 int lineCounter = 0; // 计数器变量,跟踪读取的行数 while (fgets(buffer, sizeof(buffer), fptr) != NULL) { lineCounter++; if (lineCounter > 2) { // 在这里可以对读取的内容做一些处理,例如输出到屏幕上 printf("%s", buffer); } } 最后,记得在程序结束时关闭文件。可以使用标准库函数fclose来完成此操作。例如,可以使用以下方式关闭文件: fclose(fptr); 这样,通过使用fgets函数和一些简单的逻辑,可以从文件中跳过前两行并读取剩余部分的内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值