使用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);
解决了这个问题