从字符串C

时间:2015-09-21 01:21:01

标签: c string scanf

我正在阅读一些包含数据的.txt文件。我的战略"这样做只是逐行读取文件。我在执行此任务时没有任何问题,但是,在某些时候我有一个包含不同数据的字符串(用空格分隔)。我只是想读一些数据,因为我不需要所有的数据。我使用string.h中的sscanf来做这个,这是我所拥有的一个例子:

#include <stdio.h>
#include <string.h>

int main(void) {
    char str[] = "1 189.37823  62.18428  2.486 25.33 -21.73 -21.68 -22.01 10.12 10.13 10.11 10.08  9.95  9.89  9.91 7    8.7    0 -42.85";

    int id, xid;
    double z, r, d, sfr, tmp;
    sscanf(str, "%d %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf",
           &id, &z, &r, &d, &tmp, &tmp, &tmp, &tmp, &tmp, &tmp, &tmp, &tmp, &tmp, &tmp, &tmp,
           &tmp, &sfr, &xid, &tmp);

    printf("id = %d, z = %lf, r = %lf, d = %lf, sfr = %lf, xid = %d\n", id, z, r, d, sfr, xid);
}

然而,我的解决方案非常不优雅,我只是在阅读&#34;所有数据,对于我不需要的数据,我使用时间变量。这样做有更正确(也许更有效)的方法吗?

2 个答案:

答案 0 :(得分:1)

使用%*f读取实际值并将其删除。

sscanf(str, "%d %lf %lf %lf %*f %*f %*f %*f %*f %*f %*f %*f %*f %*f %*f %*f %lf %lf %*f",
          &id, &z, &r, &d, &sfr, &xid);

答案 1 :(得分:-1)

如果可以,请忽略最后一个,因为没有必要, 然后我们有:

SELECT u.username , p.score 
FROM users u 
  INNER JOIN pictures p 
  ON u.id = p.user_id  
WHERE u.id = 1