Windowsでmingwでgcc 4.6.1を使用しています。
私は最近、%a
float を浮動小数点 16 進数表記で正確に表現するためのフォーマット指定子について学びました (どうやら C99 で)。
何らかの理由で、フロートをこの方法で問題なく印刷できますが、スキャンに問題があります。
の両方のインスタンスを置き換える%a
と%f
、私のコードは浮動小数点数の印刷とスキャンをうまく処理します。
従来の Unix システム (gcc 4.2.1) で実行した場合、コードは問題なく動作するようです。
float と double で考えられるすべてのバリエーションを試しました。flag を追加し-std=c99
てみましたが、数値リテラルを double または float として扱うかどうかが変わるように見えましたが、問題は解決しませんでした。
他の誰かがこの問題を再現できるかどうか、およびそれを修正するために私ができることを 2 つ知りたいです。
#include <stdio.h>
int main(){
char buffer[1000];
sprintf(buffer, "%la", 21.3930);
double x = 0;
printf("\n");
printf(buffer);
if(!sscanf(buffer, "%la", &x))
printf("\nscan failed.");
printf("\n%la", x);
return 0;
}
出力は次のとおりです。
0x1.5649bap+4
scan failed.
0x0.000000p+0
助けていただければ幸いです。