59

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 は正しい値を返しますが、b = -858993460 既に試したことは次のとおりです。または %lf または %e または %g )、fflush(stdin) を使用してキーボード バッファーをクリアし、最初に b を読み取り、すべての可能な組み合わせを試してみました.32 ビット OS では double の長さに問題があることがわかりました。 double を読み取るために scanf("%lf", &f) を使用する必要があるため、何をしても、2 番目の値は常に間違っています。

Windows 7 32 ビット OS のデスクトップに MS VS Express 2012 を使用しています。

4

6 に答える 6

116

%lfdouble を読み取るには、フォーマット指定子を使用します。

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

ウィキペディアには、利用可能なフォーマット指定子に関する適切なリファレンスがあります。

%lf結果も出力するには、フォーマット指定子を使用する必要があります。

printf("%lf %lf",a,b);
于 2012-12-05T18:45:32.523 に答える
6

私の知る限り、%d小数点のない数値である10進数を意味します。double 値をロードする場合は、%lf変換 (long float) を使用します。printf の場合、同じ理由で値が間違っています。%d整数(および、何をしているのかわかっている場合はおそらく文字)の数値にのみ使用されます。

例:

double a,b;
printf("--------\n"); //seperate lines
scanf("%lf",&a);
printf("--------\n"); 
scanf("%lf",&b);
printf("%lf %lf",a,b);
于 2012-12-05T18:46:00.463 に答える
3

に対して間違ったフォーマット シーケンスを使用しています。代わりにdouble使用する必要があります:%lf%ld

double a;
scanf("%lf",&a);
于 2012-12-05T18:45:48.387 に答える
-3

を使用%lfすると、この問題を解決するのに役立ちます。

使用する :

scanf("%lf",&doub)
于 2016-11-23T10:05:37.830 に答える