【问题标题】:Stopping endless loop when int = (something that's not an integer)当 int = 时停止无限循环(不是整数)
【发布时间】:2011-05-28 18:25:50
【问题描述】:
所以这是我开始编程以来一直遇到的问题(不久前。我仍然不知道为什么我开始使用 C++)。当我有一些整数变量并且用户的输入定义了它们时,如果用户输入的东西 other 不是整数,程序会吓坏并运行它给出的最后一个命令的无限循环。我认为不需要示例代码,但如果需要,我可以很容易地制作一个基本示例。
【问题讨论】:
标签:
c++
debugging
infinite-loop
【解决方案1】:
如果您想确切地知道您的错误是什么,那么我们需要查看您的代码,但通常的成语是这样的:
int i;
while (std::cin >> i) {
// do something with the user's input, i
}
if (std::cin.fail()) {
std::cout << "not a number!\n";
}
如果发生故障并且您想跳过无效输入以便用户可以重试,首先调用cin.clear(),然后调用cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n') 忽略整行,或std::string s; std::cin >> s; 忽略空格分隔词。
请注意,由于第二种情况实际上是在内存中构造字符串,因此用户可以输入几千兆字节而没有空格,程序将失败。如果输入来自终端,那通常很好,这是用户自己的愚蠢错误。如果输入来自 HTTP 请求或其他不受信任的来源,则可能会不太好,所以在未来的某个时候,您可能最终会担心它......
【解决方案3】:
当总是编程时,我的意思是总是,验证你的输入。
检查你得到的输入是否正常。
我的意思是,如果你得到一些应该是 int 的东西,检查它是否是。
如果不是,请转换它。
如果你得到一个字符串,检查它是否在界限内,意思是它是长,短,等等。
cin
在您的情况下将是 Google 的术语。