C++ Integer 后跟 char 被接受为输入
C++ Integer Followed by char gets accepted as an input
我正在使用一个函数来检查我的输入是否仅为整数:
int input;
while (true)
{
std::cin >> input;
if (!std::cin)
{
std::cout << "Bad Format. Please Insert an integer! " << std::endl;
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
continue;
}
else
return input;
}
然而,当输入一个整数后跟一个字符时,例如。 3s,整数被接受并打印消息。
如何确保这种格式的输入不被接受,也不接受4s 5形式的输入,所以当整数出现在[=21=之后].
发生这种情况是因为 C++ 中的字符由它们在 ascii 中的数值表示 table,您可以尝试这样的正则表达式:
#include <regex>
#include <string>
std::string str;
std::regex regex_int("-?[0-9]");
while (true)
{
std::cin >> str;
if (regex_match(str, regex_int))
{
int num = std::stoi(str);
//do sth
break;
}
}
不需要正则表达式来重复 std::stoi
所做的验证。只需使用 std::stoi
:
std::string input;
std::cin >> input;
std::size_t end;
int result = std::stoi(input, &end);
if (end != input.size())
// error
我正在使用一个函数来检查我的输入是否仅为整数:
int input;
while (true)
{
std::cin >> input;
if (!std::cin)
{
std::cout << "Bad Format. Please Insert an integer! " << std::endl;
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
continue;
}
else
return input;
}
然而,当输入一个整数后跟一个字符时,例如。 3s,整数被接受并打印消息。
如何确保这种格式的输入不被接受,也不接受4s 5形式的输入,所以当整数出现在[=21=之后].
发生这种情况是因为 C++ 中的字符由它们在 ascii 中的数值表示 table,您可以尝试这样的正则表达式:
#include <regex>
#include <string>
std::string str;
std::regex regex_int("-?[0-9]");
while (true)
{
std::cin >> str;
if (regex_match(str, regex_int))
{
int num = std::stoi(str);
//do sth
break;
}
}
不需要正则表达式来重复 std::stoi
所做的验证。只需使用 std::stoi
:
std::string input;
std::cin >> input;
std::size_t end;
int result = std::stoi(input, &end);
if (end != input.size())
// error