-1

Xcode 4.6で実行されるCで記述されたプログラムがあります。このプログラムでは、関数の1つがユーザー入力に基づいて2つの浮動小数点数を除算します。lldb何らかの理由で、正しい順序で除算を実行しようとすると(コードサンプル1)、プログラムは一時停止してデバッガーを無限ループでオンにします。除算を反転しようとすると、結果は常にゼロになります(コードサンプル2)。

サンプル1コード:

float num2, num1;
int main() {
    scanf("%f",&num1);
    scanf("%f",&num2);

    num2 = num1/num2;

    printf("%f",num2);
}

サンプル1の出力:

4
2      // user inputs calculation

(lldb)   // program keeps printing this indefinitely

サンプル2コード:

float num2, num2
int main() {
    scanf("%f",&num1);
    scanf("%f",&num2);

    num2 = num2/num1;

    printf("%f",num2);
}

サンプル2の出力:

4
2        // user inputs calculation

0        // since calculation is inverted, input was interpreted as 2/4, but rather than returning 0.5, the program returns 0.

なぜこれが発生するのか、またはそれを修正する方法がわかりません。ここの誰かが同様の問題を抱えていて、修正を見つけましたか?

4

2 に答える 2

1

これは C++ ではなく C です。scanf()変数を変更 (つまり、書き込み) できるようにするには、変数へのポインターを引数として渡す必要があります。

scanf("%f", &num1);
            ^
          This!
于 2013-03-14T20:58:09.957 に答える
0

printf例 1の出力が表示されない理由は\n、新しい行を追加する文字列の末尾に がないためです。行が終了するまで、lldb はその出力を出力しません。

于 2013-03-15T08:57:10.820 に答える