我有这样的字符串:
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
所以我猜我跳绳有问题,但我无法弄清楚。
答案 0 :(得分:1)
我想通了:sscanf()
执行贪婪匹配,因此跳过的字符串太长。使用
sscanf(line, "%d|%d|%*c|%lf|%*[^|]|%*[^|]|%*[^|]|%d|%*[^|]|",
&rec.order_key, &rec.cust_key, &rec.total_price, &rec.ship_priority);
解决了这个问题。