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