使用这种结构:
typedef struct sProduct{
int code;
char description[40];
int price;
};
我想用这种格式读取一个txt文件:
1,Vino Malbec,12
格式为: code,description,price
. 但是当它有空格时,我在阅读描述时遇到了问题 .
我试过这个:
fscanf(file,"%d,%[^\n],%d\n",&p.code,&p.description,&p.price);
代码正在保存好,但随后在描述中保存 Vino Malbec,12
,当我只想保存 Vino Malbec
因为 12
是价格 .
有帮助吗?谢谢!
2 回答
主要问题是
"%[^\n],"
."%[^\n]"
扫描除'\n'
以外的所有内容,因此','
扫描description
. 当遇到逗号时,代码需要停止扫描到description
.使用面向行的文件数据,第一次读取1行 .
然后扫描它 . 使用
%39[^,]
不扫描','
并将宽度限制为39char
.另一个漂亮的技巧是:使用
" %n"
来记录解析的结束 .[编辑]
简化:@ user3386109
更正:@cool-guy删除&
@chux已经就此发布了一个很好的答案,但是如果你需要使用
fscanf
,请使用这里,
fscanf
首先扫描一个数字(%d
)并将其放入p.code
. 然后,它扫描逗号(并丢弃它),然后扫描最多39个字符或直到逗号并将所有内容放入p.description
. 然后,它扫描逗号(并丢弃它),然后扫描一个数字(%d
)并将其放入p.price
.