1

Dev-cpp には、GetResults 関数を含むサンプル プログラム Jackpot が付属しています。

void
GetResults ()
{
   .
   .
   .

     else if (i>j)
     {
        cout << "Too BIG\n";
        life = life - 1;    // -1 to the user's "life"
        cout << "Number of remaining life: " << life << "\n\n";
        GetResults();
     }

これは、ユーザー入力を繰り返し求めるエレガントな方法ですか? do-while確かに、ループで約 20 行をラップするよりも読みやすいです。私はそれが好きな傾向がありますが、そのようなものはあまり見ないので、よくわかりません. あなたの意見は何ですか?

編集: あなたの例では、再帰の深さは命の数によって妨げられているため、これは1000または100を超えることはないので問題ないようです-これがまさに私がそれを検討した理由ですが、今ではそれがかなりばかげたアイデア:)誰がこれをサンプルプログラムに入れたのだろうか...

入力してくれてありがとう!

4

3 に答える 3

2

これは確実にスタック オーバーフローにつながるため、この方法で行うべきではありません。どのくらいの頻度で実行できるかはスタック サイズによって異なりますが、確実にクラッシュします。あなたの例では、再帰の深さは命の数によって妨げられているため、これは 1000 または 100 よりも大きくならないので問題ないようですが、一般的には使用しないでください。

インデントはwhileループ内のブロックを識別するのに役立つため、可読性にも同意しませんが、このようなタスクでは再帰は非常にまれであり、人々を混乱させることが多いと思います.

于 2009-01-19T08:51:49.670 に答える
1

アプリケーションのスタック サイズをテストする場合を除き、これは良い方法ではありません。;)

于 2009-01-19T08:53:20.277 に答える
1

いいえ!悪い!

これはまったく良い設計ではありません。最善の方法は、呼び出し元で while ループにラップすることです。IE

int input = 0;
while (GetInt(&input))
{
    if (input > something)
    {
        cout << "Too big";
        life--;
    }
    else
        break;
}

StackOverflow とは何か疑問に思ったことはありませんか? コードが書かれている方法で少し大きすぎる数値を入力してみてください。そうすればわかります:)

于 2009-01-19T08:54:41.660 に答える