0

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

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

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

4

3 回答 3

4

将发生的最糟糕的事情while(true){}是您将进入无限循环。

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

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

于 2012-06-20T09:34:23.527 回答
3

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循环内源代码中的可见语句。

值得注意的是,许多其他事情也可以创建无限循环——例如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
于 2012-06-20T09:38:57.970 回答
0

如果您编写控制台应用程序,您希望它在控制台中运行。

不要 whilecin.get()或任何事情,只使用你的程序,因为它打算被使用。

于 2012-06-20T09:37:38.567 回答