微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果用户键入无效值,为什么从 cin 读取的这段代码会无限递归?

如何解决如果用户键入无效值,为什么从 cin 读取的这段代码会无限递归?

我正在学习 C++,我写了这段代码

#include <iostream>

namespace input
{
  template <typename T>
  T prompt_user(std::string prompt)
  {
    T input;
    std::cout << prompt << ": ";
    std::cin >> input;
    if (std::cin.fail())
    {
      std::cin.clear();
      prompt_user<T>(prompt);
    }
    return input;
  }
} // namespace input

如果用户输入无效值,我的 if 语句会用 std::cin.fail() 捕获它(我认为你就是这样做的)并重新开始.但它会无限循环我的代码并跳过cin。我该如何解决这个问题?

解决方法

当您重新开始时,您只是再次读取相同的无效值。您没有代码来确定无效值在输入流中的开始和结束位置并将其删除。

目前尚不清楚修复是什么。无效值的组成可能取决于类型。你想丢弃一行吗?在找到有效输入之前是否要丢弃字符?或者什么?

您需要决定您想要什么行为并对其进行编码。

,

我必须在 std::cin.ignore(std::numeric_limits<std::streamsize>,'\n') 下方添加 std::cin.clear()。我很抱歉我搞砸了。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。