として定義cし、intそれを と比較しました0.7。問題を無視してもscanf、あまり意味がありません。変数ごとに、整数のみを保持するか、(場合によっては分数の) 実数を保持するかを決定します。整数の場合は、おそらくint. 実数の場合、おそらく が必要ですdouble。そしてscanf、変数の型に応じて、適切な形式を使用する必要があります。詳細については、scanfドキュメントを参照してください。
この"%d"形式でscanfは、単一の整数を読み取り (改行を含む空白をスキップした後)、停止します。入力が の場合、"12.34"を読み取り、変数に"12"格納して、 を入力ストリームに12残します。".34"後でscanfwithを呼び出すと"%d"、文字が表示されたときに失敗し'.'ます。浮動小数点形式のいずれかを使用して、タイプの変数を読み取り、 のdoubleような入力を許可し"12.34"ます。
scanf正常に読み取られたアイテムの数を示す結果、またはエラー表示を返します。その結果をテストして、不良データでやみくもに実行を続けるのではなく、プログラムがエラーを検出するようにする必要があります。
プログラムに入力した内容を正確に(つまり、コピーして貼り付けて)表示すると、質問に答えやすくなります。
変数の値と によって返された結果を出力すると、何が起こっているのかを理解するのscanfに役立ちます。または、デバッガーが利用可能な場合は、デバッガーで値を調べることができます。
注意すべき点:scanfは、入力構文エラー (たとえば、実数を探しているときに を入力した場合"foobar") で失敗を報告しますが、必ずしもオーバーフローを診断するとは限りません。1.0e99999999浮動小数点入力に対して入力した場合、動作はundefinedです。scanfこの問題を回避する唯一の現実的な方法は、数値入力での使用を避けることです。(IMHO これは、C 標準が*scanf関数を定義する方法の欠陥です。)
浮動小数点比較は信頼できないことで有名です。cが浮動小数点変数の場合、値は 2 進浮動小数点では正確に表すことができないc > 0.7ため、true または false のいずれかになります。0.7