【问题标题】:Stopping endless loop when int = (something that's not an integer)当 int = 时停止无限循环(不是整数)
【发布时间】:2011-05-28 18:25:50
【问题描述】:

所以这是我开始编程以来一直遇到的问题(不久前。我仍然不知道为什么我开始使用 C++)。当我有一些整数变量并且用户的输入定义了它们时,如果用户输入的东西 other 不是整数,程序会吓坏并运行它给出的最后一个命令的无限循环。我认为不需要示例代码,但如果需要,我可以很容易地制作一个基本示例。

【问题讨论】:

  • 我们肯定需要一些代码来了解您的意思。
  • 示例代码?为什么会有人想要那个?
  • 用 C++ 开始编程比你现在意识到的更好。

标签: 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&lt;std::streamsize&gt;::max(), '\n') 忽略整行,或std::string s; std::cin &gt;&gt; s; 忽略空格分隔词。

请注意,由于第二种情况实际上是在内存中构造字符串,因此用户可以输入几千兆字节而没有空格,程序将失败。如果输入来自终端,那通常很好,这是用户自己的愚蠢错误。如果输入来自 HTTP 请求或其他不受信任的来源,则可能会不太好,所以在未来的某个时候,您可能最终会担心它......

【讨论】:

    【解决方案2】:
    【解决方案3】:

    当总是编程时,我的意思是总是,验证你的输入。

    检查你得到的输入是否正常。 我的意思是,如果你得到一些应该是 int 的东西,检查它是否是。 如果不是,请转换它。

    如果你得到一个字符串,检查它是否在界限内,意思是它是长,短,等等。

    cin
    

    在您的情况下将是 Google 的术语。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-21
      • 2015-02-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多