1

さて、私は電卓に取り組んできました。私は現在、有効な整数と文字の違いを教えようとしています。簡単な回避策として、次のことを行いました。

int calc()
{
cout << "Number 1:"; cin >> fnum;
cout << "Number 2:"; cin >> snum;
    if (snum <= -1000 || fnum <= -1000)
    {
        cout << ("Error: Invalid Number!") << endl;
        calc();
    }
    else
    {
        ff();
    }
return 0;
}

そして、私が文字を入力するたびに、次のように言って無限ループに入ります: SymbolHere:Number 1:Number 2:

ff(); 計算関数を呼び出しています。

これを修正してスタックオーバーフロー/無限ループを防ぐ方法を知りたいですか? Pastebin リンク: http://pastebin.com/GxN2uJAQ

4

1 に答える 1

0

編集:わかりました、このコードには多くのことがあります。

wait = 0;
while (wait <= 5)
{
   wait++;
}

プログラムは非常に速くインクリメントしますが、これは人間の心には検出できません。これを完全に削除することをお勧めします。

if (snum >= 0 || fnum >= 0)
                {
    cout << ("Error: Invalid Number!") << endl;
    wait = 0;
    while (wait <= 5)
    {
       wait++;
    }
    system("CLS");
    calc();
    }

これらの番号が有効であるのに、なぜエラー メッセージを送信するのですか? 負の数だけを追加する場合を除き、これは異なる範囲を持つ必要があります。

関数呼び出しも main に解決されることはなく、代わりにお互いを呼び出します (ffそしてcalc) 無限に、プログラムには正直なところ、あまりにも多くの欠陥と悪いプログラミング慣行があります。あなたが持っているチュートリアル/本を捨てて、より最新のリストを見つけてみてください(辛くて申し訳ありませんが、言わなければなりません).

C++ プライマー プラス

CPlusPlus.com

TheNewBoston (推奨)


int に対して char を入力すると、入力が失敗する可能性があります。cin によってスローされたものを確実にキャッチして、状態をクリアする必要があります。

std::string err = "error!";
try {
    std::cin >> x;
    if(!cin)
        throw err;
    //....
}
catch(std::string& ee)
{
    std::cout << ee << std::endl;
    cin.clear();
    cin.ignore(numeric_limits<streamsize>::max(),'\n');
}

必ず<limits>ファイルに含めてください。

于 2013-05-21T02:53:27.807 に答える