如何读取格式为“123 35 123 0 0 0 817”的C中的数据

时间:2012-09-24 11:32:09

标签: c io

我想从字符串中读取数据。字符串是这样的:

"123 35   123 0    0      0       817 0    0   0   0"

字符串中有一些不确定的数字和空格。我想读第三个数字。如何阅读数据?

2 个答案:

答案 0 :(得分:10)

使用sscanf()。它将跳过空格。

int a, b, c;
if( sscanf(string, "%d %d %d", &a, &b, &c) == 3)
  printf("the third number is %d\n", c);

您还可以使用%*来取消分配两个第一个数字:

int a;
if( sscanf(string, "%*d %*d %d", &a) == 1)
  printf("the third number is %d\n", a);

请注意sscanf()返回它所做的成功转换(和赋值)的次数,这就是为什么必须在依赖输出变量的值之前检查返回值。< / p>

答案 1 :(得分:2)

sscanf专为此设计,特别是*修饰符,用于丢弃输入:

const char *input = "...";
int value;

// here we use the '*' modifier to discard the input from our string
sscanf("%*i %*i %i", &value);

// value now magically has the value you need.
然而,

sscanf确实有它的缺点。虽然它确实丢弃了你需要的空格,但它传统上也很慢。如果可以的话,我会改用strtol,这会更快(因为它不需要解析格式字符串)。