我正在尝试通过cin
和当我尝试这样做时在C ++中获取整数的输入:
int port = 0;
do
{
std::cout << "Enter port for server: ";
std::cin >> port;
} while (port <= 0);
如果我没有输入有效的整数,它将向我的终端发送“输入服务器端口:”的垃圾邮件。我该如何处理这种情况,为什么会向我的终端发送垃圾邮件?
答案 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(); }