-4

4 ~ 16 個の変数を取得するために解析する必要がある入力文字列があります。sscanf を使用すると、最初のいくつかの変数を取得できますが、残りは 0 として表示されます。残りを取得するにはどうすればよいですか?

行形式: COMMAND [スペースで区切られた 1 ~ 16 個の float 変数]

この行は、次のようなものを使用してファイルから入っています。

fgets(行、20、ファイル);

sscanf(行, "%s", パラメータ);

文字列 parString(param);

if(parString == "NEAR"){

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

}...

行の最初の単語に応じて、その場合に読み込む必要がある変数の数がわかります。

4

2 に答える 2

1

C での 1 つの方法は、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

于 2012-11-06T18:46:13.583 に答える
1

std::istringstreamこのタスクは、これまでに読んだ位置を記憶しているため、a を使用した方がはるかに適切です。したがって、次のようなコードを書くことができます

#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;
}

とにかくそのような何か。私はあなたがその考えを理解すると確信しています。

于 2012-11-06T18:39:18.433 に答える