C ++无限循环导致堆栈溢出错误?

时间:2013-05-21 02:42:05

标签: c++ function stack-overflow infinite-loop

好的,所以我一直在研究我的计算器。我目前正试图让它来区分一个有效的整数和一个字符。作为一个简单的解决方法,我做了:

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 Link:http://pastebin.com/GxN2uJAQ

1 个答案:

答案 0 :(得分: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,而是相互调用(ffcalc)infinity,程序老实说有太多缺陷和糟糕的编程习惯。删除你所拥有的任何教程/书籍,并尝试查找更新的列表(抱歉是苛刻,但必须说明。)

C++ Primer Plus

CPlusPlus.com

TheNewBoston(推荐)


你可能输入一个输入失败的输入说明了一个int,你需要确保抓住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>