【问题标题】:C++ Infinite Loop causing a stack overflow error?C ++无限循环导致堆栈溢出错误?
【发布时间】:2013-05-21 02:42:04
【问题描述】:

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

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:数字 1:数字 2:

ff();正在调用计算函数。

我想知道如何解决这个问题并防止堆栈溢出/无限循环? Pastebin链接:http://pastebin.com/GxN2uJAQ

【问题讨论】:

  • 查看输入操作的结果。
  • 在这种情况下,recusion 增加了哪些附加值,而不仅仅是一个 while 循环?
  • 不是无限循环,而是无限递归

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


【解决方案1】:

编辑:好的,这段代码有很多东西。

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)无穷大,该程序确实存在太多缺陷和不良编程习惯。放弃您拥有的任何教程/书籍,并尝试找到一个更新的列表(对不起,这很苛刻,但必须说出来)。

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');
}

确保在您的文件中包含&lt;limits&gt;

【讨论】:

  • 这部分代码的重点是检查它是否是一个数字。因为假设...... LOL 既不是> = -1000,因为它不是一个数字,所以它应该无法通过测试。确实如此。但是当它返回时,它会继续循环,甚至不询问用户的输入。我试图通过在请求输入之前将两个变量都设置为零来解决这个问题。但它仍然陷入了循环。 (我对 C++ 也很陌生,因此我制作了一个简单的计算器)如果您需要查看所有代码,可以在这里找到:pastebin.com/GxN2uJAQ
  • 你需要发布你的循环,而不仅仅是它的功能。
  • @user2396111 我添加了一个编辑。它不是很漂亮,但希望你会接受我的建议。
  • 等待功能是一个实验。我学到的大部分东西都是我自己教的。我读了一本书的几章后决定试一试。
  • 好的,所以我让一个朋友检查了一遍,他清理了很多东西。只需将东西移动到不同的地方并结束 main();尽早发挥作用!
猜你喜欢
  • 2017-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-07
  • 2018-07-10
  • 2014-12-15
  • 1970-01-01
  • 2011-02-08
相关资源
最近更新 更多