【问题标题】:sscanf multiple inputssscanf 多输入
【发布时间】:2012-11-06 18:34:53
【问题描述】:

我有一个输入字符串,我需要对其进行解析以获取 4 到 16 个变量。使用 sscanf 我可以获得前几个变量,但其余变量显示为 0。我需要做什么才能获得其余变量?

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

该行来自使用以下内容的文件:

fgets(line, 20, file);

sscanf(line, "%s", param);

字符串parString(param);

if(parString == "NEAR"){

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

}...

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

【问题讨论】:

  • 输入字符串是如何定义的?我们可以举一个你试图解析的例子吗?哦,还有你的代码。你知道,常见的问题......
  • @Joe 示例行将是“SPHERE s3 -4 2 -10 2 2 1 0 0 0.5 0 0 1 0 1000”
  • fgets(line, 20, file) 中,20 个空间真的足够容纳你的整条线吗?

标签: c++ c input scanf


【解决方案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;
}

反正就是这样。我相信你明白了。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2021-12-28
      • 2020-07-18
      • 1970-01-01
      • 1970-01-01
      • 2017-03-13
      • 1970-01-01
      • 2019-05-17
      • 1970-01-01
      • 2021-03-12
      相关资源
      最近更新 更多