C++ 如何使用cin实现单行整型命令行输入验证?

C++ 如何使用cin实现单行整型命令行输入验证?,c++,C++,我有一个程序,要求用户输入[0,2]范围内的整数。我使用以下链接作为指导 但是,当用户在不输入数据的情况下按enter键时,光标只会转到命令提示符中的下一行,而我更希望它能提示用户输入有效的数字。在这种情况下提示用户是否有意义,或者是否有理由不首先将验证作为单行输入来实现?在字符串的情况下,我会使用getline来解决这个问题,在这种情况下我应该使用它吗?以下是我的代码,基于上述链接: #include <iostream> int main() { int answer

我有一个程序,要求用户输入[0,2]范围内的整数。我使用以下链接作为指导

但是,当用户在不输入数据的情况下按enter键时,光标只会转到命令提示符中的下一行,而我更希望它能提示用户输入有效的数字。在这种情况下提示用户是否有意义,或者是否有理由不首先将验证作为单行输入来实现?在字符串的情况下,我会使用getline来解决这个问题,在这种情况下我应该使用它吗?以下是我的代码,基于上述链接:

#include <iostream>

int main()
{
    int answeredNumber;
    while(1)
    {
        std::cout << "Enter your answer: ";
        if(std::cin >> answeredNumber && answeredNumber >= 0 && answeredNumber <= 2)
        {
            break;
        }
        else
        {
            std::cout << "Please enter a valid answer: " ;
            std::cin.clear();
          std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
        }
    }
    system("pause");
}
#包括
int main()
{
国际应答号码;
而(1)
{

std::cout>answeredNumber&&answeredNumber>=0&&answeredNumber这是因为使用
cin
获取整数将跳过前导空格,包括换行符。这不是一个简单的方法

如果需要基于行的输入,可以将输入值作为字符串,然后解释:

#include <iostream>
#include <sstream>
#include <string>

int main (void) {
    std::string inputLine;
    int answer;
    std::cout << "Enter your answer: ";
    while(1) {
        getline (std::cin, inputLine);
        std::stringstream ss (inputLine);
        if ((ss >> answer))
            if ((answer >= 0) && (answer <= 2))
                break;
        std::cout << "No, please enter a VALID answer: " ;
    }
    std::cout << "You entered " << answer << '\n';
    return 0;
}
#包括
#包括
#包括
内部主(空){
std::字符串输入线;
int答案;
标准::cout>答案)

如果((答案>=0)和&(答案另一个答案指定了问题。但是,我认为对代码稍加修改将解决您眼前的问题:

int answeredNumber = std::cin.get() - '0';
if(answeredNumber >= 0 && answeredNumber <= 2)
int answeredNumber=std::cin.get()-“0”;

如果(answeredNumber>=0&&answeredNumber>运算符接收格式化数据,则需要使用
get()
和其他函数来接收未格式化数据。

是否
get
获取字符,然后将其转换为整数?我认为可能需要将其转换为实值(例如,通过减去“0”)。