while(true)可能发生的最坏情况是什么?
What's the worst that could happen with while(true)?
我正在通过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
可以变得>= b
,while (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
如果编写控制台应用程序,则打算从控制台中运行该应用程序。
不要while
、cin.get()
或任何东西,只需按照预期使用您的程序即可。
- 将树节点添加到向量向量中的 n 元树遍历的平均和最坏情况时间复杂度是多少?
- C++ - 最坏情况和平均情况插入时间复杂度在 std::unordered_map <int,int>?
- 有没有一种惯用的方法可以在不存储变换或不必要地重新计算的情况下找到数组变换的最小/最大值?
- 在不进行排序的情况下查找数组中n个最小值的索引
- 在最坏的情况下试验快速排序.它运行良好,但在最坏的情况下发生未知错误.我想
- std::regex 是否保证了最坏情况下的时间复杂度?
- 在没有额外代码的情况下链接两个独立类的最通用方法是什么?
- 使用c 中的sort()函数对字符串进行排序的最坏情况是什么是什么
- 快速排序实现的最坏情况提示
- while(true)可能发生的最坏情况是什么?
- 此算法的最坏情况运行时间是多少
- 快速排序-最坏的情况会导致堆栈溢出
- 这个代码O(R*C)的最坏情况是什么
- 在最坏的情况下,多少QPI延迟可以减慢任意应用程序的速度
- 在实时应用程序中最坏情况下执行的最快c++映射
- 为什么在最坏的情况下unorder_set重哈希复杂度可能是O(n^2)
- 对于unordered_map,最坏的情况是什么?
- 为什么c++程序要为局部变量分配比在最坏情况下需要的更多的内存?
- 如何对三个快速排序的中值进行最坏情况排列
- 最坏情况是Unordered_set插入