3

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

一个文本文件有一个标题,

例如,

# 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

所以它解析的是空格而不是换行符。不知道发生了什么。

4

3 回答 3

10

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

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

这将读取整行。

于 2012-05-07T10:14:32.267 回答
6

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

用于fgets阅读整行。

于 2012-05-07T06:22:10.987 回答
1

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

#include <stdio.h>

#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);
}
于 2012-05-07T06:43:09.867 回答