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ここで既に試したことです。doubleの代わりにfloatまたはintを使用し、scanf_sを使用し、scanf( "%dまたはまたは%lfまたは%eまたは%g)、fflush(stdin)を使用してキーボードバッファーをクリアし、bを最初に読み取り、すべての可能な組み合わせを試します。32ビットOSのdoubleの長さに問題があることがわかりました。そのため、scanf( "%lf"、&f)を使用して強制的にdoubleを読み取るようにします。私が何をしても、2番目の値は常に間違っています。
Windows 7 32ビットOSでデスクトップ用MS VS Express 2012を使用します。
%lf
形式指定子を使用して、doubleを読み取ります。
double a;
scanf("%lf",&a);
ウィキペディアには、利用可能な形式指定子用の 適切な参照 があります。
%lf
形式指定子を使用して、結果も出力する必要があります。
printf("%lf %lf",a,b);
私が知る限り、%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);
double
に間違ったフォーマットシーケンスを使用しています。%lf
の代わりに%ld
を使用する必要があります。
double a;
scanf("%lf",&a);
printf
のデータ型は最終的にdoubl
内のfloat
データ型に変換されるため、double
の書式指定子はprintf
データ型の%f
でなければなりません。
float
データを印刷する規定はありません。ここでの議論を見つけてください: printfのdoubleの正しい書式指定子
%lf
を使用すると、この問題の解決に役立ちます。
つかいます :
scanf("%lf",&doub)