从字符串 C 中读取一些数据
Reading some data from string C
我正在阅读一些包含数据的 .txt 文件。我这样做的 "strategy" 只是逐行读取文件。我在执行此任务时没有问题,但是,在某些时候我有一个包含不同数据的字符串(以空格分隔)。我只想读取一些数据,因为我不需要所有数据。我使用 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);
}
但是,我的解决方案很不优雅,我只是 "reading" 所有数据,对于我不需要的数据,我使用了时间变量。有没有更正确(也许更有效)的方法来做到这一点?
使用%*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);
如果可以,请忽略最后一个,因为它没有必要,
那么我们有:
sscanf( str, "%d %lf %lf %lf, &id, &z, &r, &d);
for(int i = 0; i < 12; i++) // easy to control skip how many number
sscanf( str, "%lf, &tmp);
sscanf( str, "%lf %lf", &sfr, &xid);
我正在阅读一些包含数据的 .txt 文件。我这样做的 "strategy" 只是逐行读取文件。我在执行此任务时没有问题,但是,在某些时候我有一个包含不同数据的字符串(以空格分隔)。我只想读取一些数据,因为我不需要所有数据。我使用 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);
}
但是,我的解决方案很不优雅,我只是 "reading" 所有数据,对于我不需要的数据,我使用了时间变量。有没有更正确(也许更有效)的方法来做到这一点?
使用%*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);
如果可以,请忽略最后一个,因为它没有必要, 那么我们有:
sscanf( str, "%d %lf %lf %lf, &id, &z, &r, &d);
for(int i = 0; i < 12; i++) // easy to control skip how many number
sscanf( str, "%lf, &tmp);
sscanf( str, "%lf %lf", &sfr, &xid);