0

この時点で、2.34 4.68 5.98 という形式のテキスト ファイルから行を読み取っています。これらの float 値を配列に格納して、後で各引数を使用できるようにしたいのですが、sscanf を使用して引数を出力しようとすると、0 になります。何が問題なのかはわかりません。ありがとうございました。

    char* line[2000];
    char* State[2000];
    sscanf(line[12],"%f", &State[12]).
    printf("\n state 1: %2.3f", &State[0]);// this suppose to print 2.34 but it prints 0
4

3 に答える 3

2

すべてを一度にスキャンできます。

float state[3];
if(sscanf(line[12], "%f %f %f", &state[0],
      &state[1], &state[2]) != 3) {
  ...
} else
  printf("\n state1: %f, state2: %f, state3:%f",
      state[0], state[1], state[2]);
}

現時点では、ある場所 ( ) にスキャンState[12]し、値が別の場所 ( ) に保存されることを期待していますState[0]

あなたが犯しているいくつかの間違い:

  • 配列に格納char *する必要がある場合の配列へのfloat格納
  • printf実際の値を受け取ることが期待される場合にポインターを使用する
  • .ステートメントを終了するために使用します...? これはタイプミスかどうかわかりません
于 2012-04-26T14:19:50.987 に答える
1
sscanf(line[12],"%f", &State[12]).

わかった。あなたは、配列がcでどのように機能するかを誤解する新しい(少なくとも私にとっては)方法を持っていることで賞を獲得します。

  1. [12]どちらの場合も、ここではほぼ間違いなく望ましくありません。

    配列の名前(またはのいずれlineか)は、配列の先頭を指すにState自動的に変換できます。char*それで

    sscanf(line,"%f", ...);
    

    の内容をスキャンしますline。ただし、その位置line[12]1人のキャラクター(*line)+12がいます。

  2. float結果を入れる%f、フォーマット指定子をからに変更する必要があります%s。あなたは決して、の結果をにすべきではありませ%fchar*

于 2012-04-26T14:26:58.823 に答える
0

テーブルの 12 番目のケースに番号を入れています。それは奇妙だ。

fscanf を直接使用する方が簡単ではありませんか?

FILE *fp = fopen(fileName);
float tabNumbers[3] = {0};

if (fp) {
    for (int i = 0; i < 3; ++i)
        fscanf(fp, "%f", &tabNumbers[i]);
    fclose(fp);
}
于 2012-04-26T14:23:19.370 に答える