分享
为什么问答平台  ›  专栏  ›  技术社区  ›  liaquore

C++CIN垃圾邮件终端 - C++ - cin spams terminal

c++
  •  0
  • liaquore  · 技术社区  · 4 天前

    我正在尝试输入一个C++中的整数 cin 当我尝试这个的时候:

    int port = 0;
    
    do
    {
      std::cout << "Enter port for server: ";
      std::cin >> port;
    } while (port <= 0);
    

    如果我没有输入一个有效的整数,它会向我的终端发送“输入服务器端口”的消息。我该如何处理这种情况?为什么要向我的终端发送垃圾邮件?

    2 回复  |  直到 4 天前
        1
  •  1
  •   Nina    4 天前

    您没有验证输入。理想情况下,您应该做的是将输入作为字符串,然后执行到所需类型的转换。如果您想将它们作为整数,可以在用户输入输入后检查cin的值。如果输入无效,则设置CIN中的故障位。

    int main(){
        int port = 0;
    
        do
        {
            std::cout << "Enter port for server: ";
            if(!(cin >> port)){//error occurred
                std::cout << "invalid input" << std::endl;
                cin.clear();//Clear the error
                break;
            }
        } while (port <= 0);
    
    }
    
    
        2
  •  1
  •   Benjamin Kljuno    4 天前
    if (std::cin.fail())
    {
        std::cout << "Enter valid port, please. " << std::endl;
    }
    
    while (std::cin.fail())
    {
        std::cin.clear();
        std::cin.ignore(numeric_limits<streamsize>::max(), '\n');
        std::cin >> port;
    }
    

    STD::CIN失败后,需要清除错误标志。您甚至不必使用fail函数:

    while (!(std::cin >> port)) { std::cin.clear(); std::cin.ignore(); }