2016-05-07 1 views
1

変数にdoubleをスキャンできません。ダブルは入力できません。どうして?

これは私のコードですが、非常に簡単です。

gcc -Wall -Wextra -Wpedantic -ansi -c double.c

#include <stdio.h> 
int main() { 
    double f; 
    scanf("%lf", &f); 
    printf("%lf\n", f); 
    return 0; 
} 

入力:5.5(またはその他の番号)

出力:0(常に)私が使用しています

(GCC)4.9.3私はコマンドでそれを構築しました。

+1

あなたのコードは現代Cで完璧です(1999年以降は正常です)。しかし、あなたは古風なC89/90モードでそれをコンパイルしているようです。当時 'printf'は'%lf'形式をサポートしていませんでした。注意してください、あなたのバージョンは実際には*好ましい*ですが、その歴史的な特質を覚えておく必要があります。本当の問題は、なぜ古風なモードでコンパイルしているのですか? – AnT

+0

@AnT私はそれを知らなかった。しかしgccがデフォルトでC99モードを設定しないのはなぜですか? –

+1

GCCは最終的にはC11ベースのCの方言に変わりました。これはデフォルトで1ヶ月前(または数ヶ月前)に行われました。その前に、彼らは伝統的なコードの互換性の理由などのためにC89/90に専念していました。 – AnT

答えて

1

コンパイラの警告を読み、修正してください。

~$ gcc -Wall -Wextra -Wpedantic -ansi -c mydouble.c 
mydouble.c: In function ‘main’: 
mydouble.c:5:12: warning: ISO C90 does not support the ‘%lf’ gnu_printf format [-Wformat=] 
    printf("%lf\n", f); 

コンパイラフラグを変更したり、コードを変更することができます。

#include <stdio.h> 
int main() { 
    double f; 
    scanf("%lf", &f); 
    printf("%f\n", f); 
    return 0; 
} 
+1

ありがとうございます。私は窓でMinGWを使用していますが、この警告は表示されません。 –

+0

@ DDKこれは、開発環境の最初の選択ですか? VirtualBoxのLinuxのように、VirtualBoxで開発OSを使ってみませんか? –

+0

はい。私はすぐに開発環境のためにLinuxを選択すると思います。 –

関連する問題