1

次のようなtxtファイルからfloat型の数値を読み取りたい:

American history 91 12.9% 8 1

しかし、私が読んだら

fscanf(file, "%s %d %f %d %d", major, &number1, &percentage, &number2, &number3);

特殊文字が含まれているため、エラーが発生します。フロート部分だけ取り出すにはどうしたらいいですか?

4

3 に答える 3

2

パーセント記号が原因で失敗するのではなく、フォーマット文字列が間違っているためです。%sは任意の文字列を読み取るのではなく、最初の空白文字、つまり「American」までの文字を読み取ります。fscanfその後失敗します。ヒント: 上を見て[ください。

ただし、これ%を回避するには、フォーマット文字列にこれを含める必要があります: %f%%(float を読み取り、a に一致%)。

于 2013-03-14T18:52:49.423 に答える
1

マンページから:

%

リテラル「%」に一致します。つまり、フォーマット文字列の %% は、単一の入力 '%' 文字と一致します。変換は行われず (ただし、最初の空白文字は破棄されます)、代入は行われません。


例:

#include <stdio.h>

int main() {
    float a, b;
    scanf("%f%%%f", &a, &b);
    printf("%f, %f\n", a, b);
    return 0;
}

出力:

$ gcc test.c && echo "1.2%3.4" | ./a.out
1.200000, 3.400000
于 2013-03-14T18:49:24.863 に答える
0

バックスラッシュ() をエスケープ文字として使用する

fscanf(file, "%s %d %f\% %d %d", major, &number1, &percentage, &number2, &number3);

于 2013-03-14T18:48:30.783 に答える