0

コードが機能しないのはなぜですか? コンパイル後、スキャンする最初の番号を書き留め、Enter キーを押すと、Windows で「応答していません」というメッセージが表示されます。

#include <stdio.h>

int main (void) {
 float x1, x2, y;
 scanf("%f %f", x1, x2);
 if (x1 < x2) {
    y = x1 / x2;
 } else if (x1 == x2) {
    y = x1 * x1 - 3;
 } else {
    y = 4 * x1 + 3 * x2;
 }
 printf("y = %f", y);
 return 0;

}
4

3 に答える 3

1

コードを機能させるには、間にスペースを入れて 2 つの数字を入力してから、Enter キーを押してください。

更新: また、scanf、prefixx1およびx2withへのポインターを渡す必要があります。&

また、浮動小数点数の等価性についても確認してください

于 2013-10-18T18:12:59.780 に答える
1

プログラムが「応答しない」エラーをスローするのはなぜですか?

scanf()標準入力ストリームstdinから入力を読み取ります。

int scanf(const char *restrict format, ... );

あなたのプログラムでは、

scanf("%f %f", x1, x2);

2%f変換仕様です。入力が読み取られ、 に変換されfloatます。次の引数"%f %f",は、変換された値が格納されるアドレスとして使用されます。ポインタが期待されます。あなたのプログラムでは、2 つfloat *が期待されています。あなたが提供しているx1x2、両方ともfloatそれ自体が間違っているタイプです。

x1初期化x2されていないため、ガベージ値が含まれています。それらをアドレスと見なしてその値を読み取ることは 、無効なメモリ読み取りであり、セグメンテーション フォールトが発生します。したがって、応答しないエラーが発生します。


解決:

scanf()(Read this );に適切な引数を渡す必要があります。

%ftype の whichを格納するには、変数のアドレスを保持できる which がfloat必要です。float*float

&演算子は、オペランドのアドレスを提供します。次の方法で問題を解決できます。

scanf("%f %f",&x1,&x2);
于 2013-10-18T18:55:21.807 に答える