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;
}
该程序的非常期望的输出必须逐行读取。但它只读了第一行。这段代码有什么错误。谢谢你。
答案 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);
再见,
弗朗西斯