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

What's the worst that could happen with while(true)?

本文关键字:最坏 情况 是什么 可能发生 true while      更新时间:2023-10-16

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

问题是,当程序提示我输入数字时,我输入"blah",按回车键,程序开始疯狂,所以我很快就退出了。

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

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

如果你在那些括号中写了一些东西,而不是一个打破循环的指令,那将一遍又一遍地重复。

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

while(true)显然可以创建一个"无限"循环,这只是意味着进程内部没有任何内容能够导致循环终止。 操作系统仍有可能决定(例如,在 CPU 使用配额用完后)或被询问(例如 kill -HUP processid在 UNIX/Linux 上)终止进程。

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

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

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

值得注意的是,许多其他事情也可以创建无限循环 - 例如,如果没有条件a可以变得>= bwhile (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

如果编写控制台应用程序,则打算从控制台中运行该应用程序。

不要whilecin.get()或任何东西,只需按照预期使用您的程序即可。