0

私はStroustrupのプログラミングの原則と実践を使用してC++を学習しています。このサンプルコードは、デバッグして機能させるためのものです。修正を加えましたが、+または-演算子を使用する算術式を入力すると機能します。ただし、*演算子を使用して式を入力しても、何も起こりません。デバッガーを使用してコードをウォークスルーしましたが、理解できませんでした。この本は非標準のインクルードファイルstd_lib_facilities.hを使用しています

実際の計算プログラムはこちらです。誰かが2*3のような表現がなぜあるのか理解するのを手伝ってくれるほど親切にできますか?2 + 3の間、結果は生成されません。動作しますか?

;PS:プログラムによると、印刷をトリガーするには、最後に有効な式が必要です。したがって、2 + 3; は正しく、トリガーして印刷しますが、2 + 3を指定しない;と、カーソルが点滅し続けます。また、電卓プログラムを作成する最初の試みであるため、多くの機能が欠けていることにも注意してください。*現時点での私の懸念は、演算子を含む単純な算術式が機能しない理由を解明することです。ありがとう。

[編集]

答えてくれてありがとう@KonradRudolph。しかし、私を困惑させたのは、gdbデバッガーを使用したとき(私はLinuxを使用しています)、*を使用して式を入力したときにデバッガーがtermにステップインしないことでした。エラーが発生したことはわかっていますが、少なくとも関数にステップインして、どこかにハングアップすることを期待していました。デバッガーがエラーのある関数にステップインしないのはなぜですか?それはもっと役に立ちます。

4

1 に答える 1

5

さて、あなたは単にすべての必要な修正をしなかった。

term

    switch (t.kind) {
    case '*':
        left *= primary();
        t = ts.get();
    case '/':
        {    
            double d = primary();
            if (d == 0) error("divide by zero");
            left /= d; 
            t = ts.get();
            break;
        }
    default: 
        ts.putback(t);     // put t back into the token stream
        return left;
    }

case '*'breakステートメントがありません。

さらにエラーが発生する可能性があります。

于 2013-02-21T10:38:38.177 に答える