C中的fscanf没有读完整行?

这非常简单,但我只是遇到了问题。

文本文件有一个标题,

例如,

# Avizo BINARY-LITTLE-ENDIAN 2.1 define Lattice 496 384 470 Parameters { AlignTransform { slice0000 0 -0 -30 -1, slice0001 0 -0 -30 -1, slice0002 0 -0 -30 -1, 

我正在尝试使用fscanf读取每一行。

  int i; for ( i = 0; i < 10; i++ ) { fscanf(fp, "%s\n", buf); printf("%d) %s\n",i,buf); } 

导致这个

 0) # 1) Avizo 2) BINARY-LITTLE-ENDIAN 3) 2.1 4) define 5) Lattice 6) 496 7) 384 8) 470 9) Parameters 

所以它正在解析空格而不是换行符。 不确定发生了什么。

fscanf%s说明符读取单词,因此在到达空格时会停止。

使用fgets读取整行。

我建议您使用fgets ,但如果您坚持使用fscanf

 fscanf(fd, "%[^\n]\n", buff); 

这将读完整行。

虽然%s可能意味着“字符串”,但fscanf(作为scanf)不是一个贪婪的东西,你应该告诉它分隔符是“新行”。 而且,您最好设置maxinum缓冲区大小以防止缓冲区溢出。

 #include  #define NAME_MAX 80 #define NAME_MAX_S "80" int main(void) { static char name[NAME_MAX + 1]; // + 1 because of null if(scanf("%" NAME_MAX_S "[^\n]", name) != 1) { fputs("io error or premature end of line\n", stderr); return 1; } printf("Hello %s. Nice to meet you.\n", name); }