c++ - 如果用户输入无效值,为什么从 cin 读取的代码会无限递归?

标签 c++ 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。我该如何解决这个问题?

最佳答案

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

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

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

关于c++ - 如果用户输入无效值,为什么从 cin 读取的代码会无限递归?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65893851/

相关文章:

javascript - MQTT 作为集中式通信协议(protocol)

c++ - 在 Ubuntu 14.04 中启动我的应用程序时出现非法指令(核心转储)错误,如何查看转储

c++ - 诠释还在工作吗?

C++ cin 在接受值之前需要 2 个或更多输入

原子的 C++ 内存屏障

c++ - 当我尝试在函数中使用模板别名时失败

c++ - 将 const 和 decltype 与指针变量一起使用

c++ - ios_base::sync_with_stdio(false) 在来自标准输入的两个输入之间不起作用

c++ - 了解 cin.fail() 和 cin.clear - vector 附加程序

c++ - 在一行上流式传输多个变量?