次のようなtxtファイルからfloat型の数値を読み取りたい:
American history 91 12.9% 8 1
しかし、私が読んだら
fscanf(file, "%s %d %f %d %d", major, &number1, &percentage, &number2, &number3);
特殊文字が含まれているため、エラーが発生します。フロート部分だけ取り出すにはどうしたらいいですか?
次のようなtxtファイルからfloat型の数値を読み取りたい:
American history 91 12.9% 8 1
しかし、私が読んだら
fscanf(file, "%s %d %f %d %d", major, &number1, &percentage, &number2, &number3);
特殊文字が含まれているため、エラーが発生します。フロート部分だけ取り出すにはどうしたらいいですか?
パーセント記号が原因で失敗するのではなく、フォーマット文字列が間違っているためです。%s
は任意の文字列を読み取るのではなく、最初の空白文字、つまり「American」までの文字を読み取ります。fscanf
その後失敗します。ヒント: 上を見て[
ください。
ただし、これ%
を回避するには、フォーマット文字列にこれを含める必要があります: %f%%
(float を読み取り、a に一致%
)。
マンページから:
%
リテラル「%」に一致します。つまり、フォーマット文字列の %% は、単一の入力 '%' 文字と一致します。変換は行われず (ただし、最初の空白文字は破棄されます)、代入は行われません。
例:
#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
バックスラッシュ() をエスケープ文字として使用する
fscanf(file, "%s %d %f\% %d %d", major, &number1, &percentage, &number2, &number3);