关于fscanf中的空格的查询()

时间:2014-02-27 18:38:27

标签: c output whitespace scanf

代码: -

while ( fscanf ( fp,"%s %d %f", e.name, &e.age, &e.bs ) !=EOF )
{
    printf ( "%s     %d     %f\n", e.name, e.age, e.bs ) ;
} 

说我在文件中有以下句子: -

  

fname lname 20 200000

     

fname1 lname1 30 50000

所需的输出是: -

fname lname     20     200000.0000

fname1 lname1     30     50000.0000

但我得到的输出是: -

fname     (garbage value)     (garbage value)

lname      20     200000.0000

fname1     20     200000.0000

lname1     30     50000.0000

上述问题是由于%s不读取空格,因此将fname lname分成两部分。

是否有任何解决方案可以获得所需的输出?

1 个答案:

答案 0 :(得分:1)

您需要在%s %s中使用fscanf并将第一个名称和姓氏读入单独的变量,然后手动连接它们。 (将snprintf%s %s一起用作格式字符串。)

char first[200], last[200];
while (fscanf(fp, "%200s %200s %d %f", first, last, &e.age, &e.bs) == 4)
{
    snprintf(e.name, sizeof(e.name), "%s %s", first, last);
    printf ( "%s     %d     %f\n", e.name, e.age, e.bs ) ;
} 

如果名称有时可能包含两个以上的部分,则需要使用更高级的内容来解析字符串(正则表达式是一种方法),或者继续使用fscanf,您需要在名称和数字之间插入一个显式的分隔符。