什么是最坏的可能发生在while(true)?

时间:2012-06-20 09:29:31

标签: c++ visual-c++ while-loop

我正在通过Visual C ++ Express和Youtube上的教程练习C ++。我通过一个很酷的视频制作了一个计算器,但我不希望程序在你做一个方程后立即结束,所以我搜索了该做什么并尝试了(真的)。

问题是,当程序提示我输入数字时,而不是数字,我输入“blah”,按回车键,程序开始变得疯狂,所以我快速退出。

如果没有while(true),如果我输入“blah”,程序会立即进入“按任意按钮退出...”短语。所以我想知道的是,有多危险(真实)? 另外,如果这个问题不合适,我真的很抱歉-_-

3 个答案:

答案 0 :(得分:4)

while(true){}最糟糕的事情是你会进入无限循环。

如果你在其他括号中写了一些内容,那么就会一遍又一遍地重复一个打破循环的指令。

这回答了你的问题。如果您想知道计算器有什么问题,请创建一个包含特定问题的新问题。

答案 1 :(得分:3)

while(true)显然可以创建一个“无限”循环,这意味着进程内部没有任何内容可以导致循环终止。操作系统仍然可能决定(例如在CPU使用配额用尽之后)或被要求(例如,在UNIX / Linux上为kill -HUP processid)来终止该过程。

值得考虑包含以下内容的无限循环之间的区别:

  • 阻止(I / O?)请求,例如等待新的网络客户端连接或数据或键盘输入,或者甚至只是等待特定的时间间隔,然后是有限量的定期或I / O相关处理,以及
  • 非阻塞分支和数据处理指令,只是围绕刻录CPU和/或颠覆CPU /内存缓存(例如x += array[random(array.size())];

在某些情况下,实际上可能会故意使用前一种情况,例如服务器进程不需要执行任何有序关闭,因此可以让操作系统关闭它而不运行任何后循环代码,但第二种情况case通常是一个编程错误:当某个方法出现退出条件或在循环控制的处理过程中发生错误以中断循环时,你倾向于只有这样的while(true)。例如,可能存在if (condition) break;,或者在出现错误时会抛出异常的东西。这可能并不明显 - 例如,如果可能是某些调用函数的异常 - 甚至是将标准iostream的函数设置为抛出转换失败或EOF - 而不是源代码中的可见throw语句循环。

值得注意的是,许多其他事情也可以创建无限循环 - 例如while (a < b)如果没有a可能成为>= b的条件,while (std::cin >> my_int) { // can use my_int... } // failed to convert next input from stdin to an int and/or hit EOF 可能永远存在。因此,编程的一般方面是您必须考虑循环如何退出,而不是语言安全性的某些问题。对于输入,执行以下操作是正常的:

{{1}}

答案 2 :(得分:0)

如果您编写控制台应用程序,则打算在控制台中运行它。

不要 whilecin.get()或其他任何内容,只需使用您想要使用的程序。