使用sscanf()跳过分隔符之间的字符串
我有两个字符串的结构如下:使用sscanf()跳过分隔符之间的字符串,c,scanf,C,Scanf,我有两个字符串的结构如下: 1|36901|O|173665.47|1996-01-02|5-LOW|Clerk#000000951|0|nstructions sleep furiously among | 我想提取位置0、1、3、7中的字段,在本例中是1、36901、173665.47和0 我试过了 sscanf(line, "%d|%d|%*c|%lf|%*s|%*s|%*s|%d|%*s|", &rec.order_key, &rec.cust_key, &re
1|36901|O|173665.47|1996-01-02|5-LOW|Clerk#000000951|0|nstructions sleep furiously among |
我想提取位置0、1、3、7中的字段,在本例中是1
、36901
、173665.47
和0
我试过了
sscanf(line, "%d|%d|%*c|%lf|%*s|%*s|%*s|%d|%*s|", &rec.order_key, &rec.cust_key, &rec.total_price, &rec.ship_priority);
printf("%d %d %lf %d", rec.order_key, rec.cust_key, rec.total_price, rec.ship_priority);
并期待着
1 36901 173665.470000 0
相反,我得到了
1 36901 173665.470000 1
因此,我猜我在跳过时出错了,但我就是想不出来。我想出来了:
sscanf()
进行贪婪匹配,因此被跳过的字符串太长。使用
sscanf(line, "%d|%d|%*c|%lf|%*[^|]|%*[^|]|%*[^|]|%d|%*[^|]|",
&rec.order_key, &rec.cust_key, &rec.total_price, &rec.ship_priority);
解决了这个问题