1. ホーム
  2. c

[解決済み】cでscanfを使用してdouble値を読み込む

2022-04-13 14:44:45

質問

C言語でscanf()を使って2つの値を読み込もうとしたが、システムがメモリに書き込んだ値が入力した値と一致しない。以下はそのコードです。

double a,b;
printf("--------\n"); //seperate lines
scanf("%ld",&a);
printf("--------\n"); 
scanf("%ld",&b);
printf("%d %d",a,b);

1と2を入力すると、CMDはaを正しく返しますが、b = -858993460以下はすでに試したものです。 double の代わりに float や int を使う、 scanf_s を使う、 scanf("%d or %f for %i or %li or %lf or %e or %g ) を使う、 fflush(stdin) でキーボードバッファをクリアする、 b を先に読み込む、などなど、考えられる全ての組み合わせについて試してみたのです。32ビットOSではdoubleの長さに問題があり、doubleを読み込むにはscanf("%lf", &f) を使わざるを得ないことが判りました。何をやっても2番目の値がおかしくなってしまう。

Windows 7 32 bit OSでMS VS express 2012 for Desktopを使用しています。

解決方法を教えてください。

を使用します。 %lf double を読み込むためのフォーマット指定子。

double a;
scanf("%lf",&a);

ウィキペディアには 適語 は、利用可能な書式指定子についてです。

を使用する必要があります。 %lf フォーマット指定子で、結果も印刷することができます。

printf("%lf %lf",a,b);