使用sscanf()在分隔符之间跳过字符串

时间:2014-05-06 10:23:49

标签: c scanf

我有这样的字符串:

1|36901|O|173665.47|1996-01-02|5-LOW|Clerk#000000951|0|nstructions sleep furiously among |

我想提取位置0,1,3,7的字段,在这种情况下136901173665.470

我已经尝试了

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

所以我猜我跳绳有问题,但我无法弄清楚。

1 个答案:

答案 0 :(得分:1)

我想通了:sscanf()执行贪婪匹配,因此跳过的字符串太长。使用

sscanf(line, "%d|%d|%*c|%lf|%*[^|]|%*[^|]|%*[^|]|%d|%*[^|]|", 
      &rec.order_key, &rec.cust_key, &rec.total_price, &rec.ship_priority);

解决了这个问题。