使用fscanf时发现了额外的空格

时间:2013-05-09 15:59:06

标签: c

我有一个文件:

hello:12312
Bye:333
Hey:22

所以我用fscanf

阅读
 FILE *file = fopen( argv[1], "r" );

        if ( file == 0 )
        {
            printf( "Could not open file\n" );
        }
        else
        {

            while(fscanf(file, "%[^:]:%d", word, &integer) != EOF)
            {
                printf("word: %s, integer: %d\n", word, integer);
            }

            fclose( file );
        } 

这就是我得到的:

word: hello, integer: 12312
word:
Bye, integer: 333
word:
Hey, integer: 22

显然除了第一个单词之外还有一个额外的空格,为什么会发生这种情况呢?

4 个答案:

答案 0 :(得分:3)

%[^:]将接受行结尾。如果您想跳过将前导空格放入word尝试:

 " %[^:]:%d"

答案 1 :(得分:3)

来自fscanf()

  

除了[,c和n]之外的所有转换说明符在尝试解析输入之前都会使用并丢弃所有前导空白字符。

\n将保留"%d"之后的输入流。

要更正为speicifer格式添加前导空格以跳过空格:

while(fscanf(file, " %[^:]:%d", word, &integer) == 2)
{
}

!= EOF更改为== 2,以防止接受格式为"hello:""hello"的行。

答案 2 :(得分:1)

在字符串格式" %[^:]:%d"的开头添加空格。这样可以避免scanf中的换行问题

 while(fscanf(file, " %[^:]:%d", word, &integer) != EOF)

答案 3 :(得分:1)

因为当您使用* scanf()函数读取整数时,不会消耗以下换行符。