sscanf多个输入

时间:2012-11-06 18:34:54

标签: c++ c input scanf

我有一个输入字符串,我需要解析它以获得4到16个变量。使用sscanf我可以得到前几个变量但其余的显示为0.我需要做什么来完成其余的工作?

行格式:COMMAND [1 - 16个由空格分隔的浮点变量]

该行是使用以下内容从文件进入的:

fgets(第20行,第10行);

sscanf(line,“%s”,param);

string parString(param);

if(parString ==“NEAR”){

      sscanf(line, "%s %f", param, &np);
      printf("%s %f\n", param, np);

} ...

根据行中的第一个单词,我知道在这种情况下需要读取多少变量。

2 个答案:

答案 0 :(得分:1)

使用std::istringstream可以更好地完成此任务,因为它会记住您到目前为止所阅读的位置。所以你可以写这样的代码

#include <sstream>

std::istringstream input("SPHERE s3 -4 2 -10 2 2 1 0 0 0.5 0 0 1 0 1000");
int var1, var2, var3, var4, var5, var6;
// get first four variables
input >> var1 >> var2 >> var3 >> var4;
if (something or other)
{
    // get the next two variables
    input >> var5 >> var6;
}

无论如何都是这样的。我相信你明白了。

答案 1 :(得分:1)

C中的一种方法是使用strtok()

char *p = strtok(str, " ");

while(p)
{
// Store each string 
// OR convert it to integer using strtol() if an intger was expected
p = strtok(NULL, " ");
}

当没有更多值可以从str读取时,循环将终止。