代码: -
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
分成两部分。
是否有任何解决方案可以获得所需的输出?
答案 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
,您需要在名称和数字之间插入一个显式的分隔符。