通过在c中逐行使用来读取文件时出错

时间:2013-12-18 09:06:47

标签: c

log.txt:

Hello world 
world is not enough 
to show our knowledge

cpp文件:

#include <stdio.h>
#include <string.h>

int main()
{
   char szLine[512+1]={0};
   FILE *fp=fopen("log.txt", "r");
   while(!feof(fp))
   {
      fscanf(fp, "%512[^\n]", szLine);
      puts(szLine);
      getchar();
   }
   return 0;
}

该程序的非常期望的输出必须逐行读取。但它只读了第一行。这段代码有什么错误。谢谢你。

4 个答案:

答案 0 :(得分:1)

试试这个

while(fscanf(fp, " %512[^\n]", szLine)==1)
{
   puts(szLine);
   getchar();
}

答案 1 :(得分:1)

因为文件流的偏移总是0,所以你读

答案 2 :(得分:1)

您可以像这样更改您的程序:

#include <stdio.h>
#include <string.h>

int main()
{
   char szLine[512+1]={0};
   FILE *fp=fopen("log.txt", "r");
   while(!feof(fp))
   {
      fgets(szLine,512,fp);
      puts(szLine);
      getchar();
   }
   return 0;
}

答案 3 :(得分:1)

“%512 [^ \ n]”不读取结束字符。文件的剩余部分以\ n开头,而fscanf无法读取该行(它返回0而不是1)。你需要阅读终结字符!

#include <stdio.h>
#include <string.h>

int main()
{
    int bla;
    char szLine[512+1]={0};
    FILE *fp=fopen("log.txt", "r");
    while(!feof(fp))
    {
        bla= fscanf(fp, "%512[^\n]", szLine);
        if(bla==1){
            printf("%d\n",bla);
            puts(szLine);
            getchar();
            fgetc(fp);
        }
    }
    return 0;
}

使用getline()可能是一种更可靠的解决方案。

 getline(&szLine,&size,fp);

再见,

弗朗西斯