gpt4 book ai didi

c++ - 正确数据类型的输入验证?

转载 作者:太空宇宙 更新时间:2023-11-04 13:34:44 25 4
gpt4 key购买 nike

这是我使用的两个循环结构,一个接一个地验证整数和字符输入:

while (((std::cout << "Enter Strength stat: ") && !(std::cin >> STR)) || ((STR > 20) || (STR < 0)))
{
std::cout << inval;
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}


while (((std::cout << "Use characters 'Y' or 'N' to confirm. ") && !(std::cin >> confirm_Y_N)) || ((confirm_Y_N != 'Y') && (confirm_Y_N != 'N')))
{
std::cout << inval;
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}

在我的手打滑并输入“1-”作为整数值之前,它一直适用于任何类型的不匹配输入。

这是当我输入任何以预期 数据类型开头然后跟在它后面的任何其他数据类型时得到的输出:

Enter Strength stat: 1-
Use characters 'Y' or 'N' to confirm. Invalid value! Use characters 'Y' or 'N' to confirm. Y-
Enter Dexterity stat: Invalid value! Enter Dexterity stat:

如您所见,它完全跳过了 while 循环的整数和字符输入验证一个接一个的条件,实质上使程序崩溃。

只要请求的字符在开头给出,为什么程序不丢弃无效字符串? char 不应该只接受单个字符字段吗?

最佳答案

预期数据之后的意外字符保留在输入缓冲区中。要解决此问题,您可以清除缓冲区。

尝试插入

std::cin.clear();
fflush(stdin);

在循环之间。对于更像 C++ 的方法插入

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

此方法将在有效输入后忽略任何意外字符。

我测试了这个方法,它是有效的。

关于c++ - 正确数据类型的输入验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30003938/

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