C ++-cin垃圾邮件终端

时间:2019-06-12 01:47:10

标签: c++

我正在尝试通过cin和当我尝试这样做时在C ++中获取整数的输入:

int port = 0;

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

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

2 个答案:

答案 0 :(得分:1)

您不验证输入。理想情况下,您应该做的是将输入作为字符串,然后执行转换为所需的类型。如果确实要将它们作为整数,则可以在用户输入输入后检查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);

}

答案 1 :(得分:1)

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失败后,您需要清除错误标志。您甚至不必使用故障功能:

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