如何读取字符串“500 600”来存储C中值为500和600的两个单独变量?

时间:2012-02-29 18:00:54

标签: c

我尝试使用atoi,但我只能以这种方式达到500。不知道从哪里开始。

4 个答案:

答案 0 :(得分:4)

您可以使用strtol“标记”一系列以空格分隔的整数:

int a, b;
char src[] = "500 600";
char *tmp = src;
// The first call to strtol parses 500
a = strtol(tmp, &tmp, 10);
// The call looks the same, but tmp now points at the space between 500 and 600
// The next call to strtol skips the space, and parses 600
b = strtol(tmp, &tmp, 10);

显然,这段代码是骨架式的,并且会跳过相关的检查。有关strtol如何处理各种意外情况的准确信息,请参阅文档。

答案 1 :(得分:1)

  1. 使用fgets读取整个字符串。
  2. 使用strtok基于空格分隔符对字符串进行标记。
  3. 将令牌转换为整数。
  4. 如果字符串包含更多字符,请转到步骤2.

答案 2 :(得分:0)

使用sscanf会很简单。 使用sscanf的示例如下:

char str[] = "500 600";
int a, b;
if(sscanf(str, "%d%d", &a, &b)==2) {
    // OK
} else {
    // failed to parse
}

如果您不需要测试sscanf是否失败,请写如下:

sscanf(str, "%d%d", &a, &b);

答案 3 :(得分:0)

char &s = "500 600";
int x, y;
if (2 == sscanf(s, "%d %d", &x, &y))
{
/* Everything is ok */
}
else
{
/* Have another go! */
}

应该做的伎俩