2017-05-19 5 views
2

のscanfが動作していない私は、Cのコードの次の行を使用する場合、正常に動作しイマイチ:変換指定子を間違って使用していますか? scanf())(Cで

double withdraw = 0; 

scanf("%.2lf",&withdraw); 

printf("\n\nWithdraw %.2lf?",&withdraw); 

これ:

double withdraw = 0; 

scanf("%.2lf",withdraw); 

printf("\n\nWithdraw %.2lf?",withdraw); 

これ:

double withdraw = 0; 

scanf("%.2lf",&withdraw); 

printf("\n\nWithdraw %.2lf?",withdraw); 

、最終的には、この:

double withdraw = 0; 

scanf("%.2lf",withdraw); 

printf("\n\nWithdraw %.2lf?",&withdraw); 
scanf関数へ

入力()は常にこれです:撤退の

1 

出力は常にこれです:

0.00 

助けてください。これは私にとってとても狂っているようだ!

+0

'printfの( "\ nは\ nWithdraw%.2lf?"、&撤退);' - > 'のprintf( "?\ N \ nWithdraw%.2lf"、撤退);' ... '削除& '印刷の呼び出しで。 –

+0

投稿されたコードブロックの4つのバージョンすべてを試しました。 – TeddyBearWithACape

+0

コードの3番目のバリエーションが要件を満たしていて、依然として0.00 – TeddyBearWithACape

答えて

4

はい、コードが間違っています。 精度は".<int>")、fscanf()ファミリでは無効です。無効です。これにより、原因はundefined behaviorとなります。引用C11

、章§7.21.6.2/ P3、fscanf()

各変換仕様は、文字%によって導入されます。 %後、次の順序で表示されます。

からオプション割り当て抑制文字*

- (任意)フィールドの最大幅を指定する0より大きい10進数の整数 (文字数)。

- オプション受信オブジェクトのサイズを指定する長さ修飾子。

- 適用する変換のタイプを指定する変換指定文字。

と、P13

変換指定が無効である場合、動作は未定義です。 undefined behaviorsがキャッチし、理解するのが難しいです、試行錯誤を使用していない、と述べた


。任意の引数型の適切な書式指定子のマニュアルページを読んでください。

+0

皆さんありがとう! scanf()の精度を取り除いて問題を修正しました! – TeddyBearWithACape

+0

@Yunnoschあなたのコメントを感謝します。私は修正を加えました。しかし、以前のものが絶対に正当であると私は信じていますが、学習の最初の踏み台は、あなたが間違っていることを認めることを学ぶことです。もし、__iff__に、これを防ぐ文化があるなら、私は未来がその道を歩み続けるかどうか分かりません。ハードな気持ち、個人的なものはありません。 –

0

あなたのコンパイラはあなたが

+0

私はDev-C++を使用しています。コンパイラーはそれをキャッチしなかったために悪くなければなりません。 – TeddyBearWithACape

+2

@TeddyBearWithACapeコンパイラで '-Wall'オプションを使用する必要があります。 '-Wall -Wextra -pedantic'を使用するのが最も良い – LPs

+1

@TeddyBearWithACape Dev-C++はIDEであり、コンパイラではありません。あなたのコンパイラは 'gcc'かもしれません。 –

0

仕事ができる、次の書式指定子のこのタイプの精度を指定することはできませんあなた

warning: unknown conversion type character ‘.’ in format [-Wformat=] 

を語っている通り。

#include <stdio.h> 
#include <math.h> 

int main() 
{ 
    double withdraw = 0; 

    scanf("%lf", &withdraw); 
    printf("\n\nWithdraw %.2lf?", withdraw); 

    return 0; 
} 
+3

違いとその理由を説明してください。また、「うまくいく」というのは、テストされていないようなものだと私は確信しています。たぶん "これはあなたのために働くことができる、そのトリックは..."。あなたの役に立つ答えをより良く理解するために。 – Yunnosch

+0

@Yunnoschありがとうございます。その理由は、あなたが '。'を使うことができないからです。 scanfで –

関連する問題