2012-11-06 35 views
-4

我有一个输入字符串,我需要解析以获得4-16个变量的任何地方。使用sscanf我可以得到前几个变量,但其余显示为0.我需要做些什么才能获得剩下的?sscanf多输入

线格式:命令[1 - 由空格分隔16浮动变量]

该生产线是从文件中使用这样的未来:

与fgets(线,图20,文件);

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

string parString(param);

如果(parString ==“近”){

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

} ...

根据该行的第一个字,我知道我需要多少变量以阅读这种情况下, 。

+6

输入字符串是如何定义的?我们可以举一个例子说明你想要解析什么!哦,和你的代码。你知道,通常的问题...... – Joe

+0

@Joe一个示例行将是 “SPHERE s3 -4 2 -10 2 2 1 0 0 0.5 0 0 1 0 1000” – linds

+1

那么这是C还是C++? – 2012-11-06 18:45:47

回答

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

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读取时,循环将终止。