gpt4 book ai didi

c++ - While 循环中的输入验证

转载 作者:行者123 更新时间:2023-11-28 02:11:46 24 4
gpt4 key购买 nike

我目前正在做一个小项目来学习(和娱乐)并且需要一个 while-loop 来检查用户的输入是否是整数 1、2、3、4 之一, 或 5. 最好的方法是什么?这是我在代码中的基本想法,但它不是很有效:

std::cin >> input;

while (cin.fail() == true || input != 1 && input != 2 && input != 3 && input != 4 && input != 5){
std::cout << std::endl "The valid choices are 1, 2, 3, 4, and 5. Please choose: ";
std::cin >> input;
std::cout << std::endl;
}

这只适用于大于 5 的数字,但如果我输入字母则失败。如何使用 cin.fail() 进行正确验证?

最佳答案

首先

#include <limits> 

以获得最大流大小。然后翻转一些逻辑

while (!std::cin >> input ||  // didn't read valid input
input < 1 || // number too small
input > 5) // number too large
{
std::cout << std::endl "The valid choices are 1, 2, 3, 4, and 5. Please choose: ";

然后清除流错误和用户输入的任何其他废话

std::cin.clear();
std::cin.ignore(std::numeric_limits<streamsize>::max(), '\n');

最后要求重做

    std::cin >> input;
std::cout << std::endl;
}

这不会捕捉到:

1.23

cin 将在 '.' 处停止读取,因为在整数中找不到它并愉快地返回 1。糟糕。

1a

同样的问题

1 holy bad input, Batman!

类似的问题。 cin 停在空格处。

你真正想做的是获得 whole input line from the user with std::getline然后使用 std::stoi to make sure that it is all an int

关于c++ - While 循环中的输入验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35421195/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com