как ограничить то, что пользователь пишет в консоли - PullRequest
0 голосов
/ 30 апреля 2019

Как мне ограничить то, что пользователь вводит в консоли?

Пример: когда он пытается написать 1234, это нормально, и когда он пытается написать символ (а) или и слово, ничего не происходит, и это все еще 1234

чтобы он мог вводить только цифры

int main (){
int x;
cin>>x; // i want the x to take only numbers
cout<<x;
return 0;
}

Ответы [ 2 ]

0 голосов
/ 30 апреля 2019

Вы не можете контролировать, какие типы пользователей.В любом случае вы не должны полагаться на достоверность введенных пользователем данных.Наилучшим подходом будет выборка ввода в виде строки, проверка правильности ввода, а затем преобразование его в целое число.

// Check if each character entered in a digit
bool isValidString(string & inp)
{
    for (int i = 0; i < inp.size(); i++)
    {
        // Checks whether inp[i] is a decimal digit character.
        if (!isdigit(inp[i]))
        {
            // This is not a digit.
            return false;
        }
    }

    return true;
}

В основной функции:

int main()
{
    string inp;
    cin >> inp;
    int outputIntValue = 0;

    if (isValidString(inp))
    {
        // Converts the valid digits into integer 
        outputIntValue = atoi(inp.c_str());
        printf("Integer value: %d\n", outputIntValue );
    }
    else
    {
        printf("Invalid input: %s\n", inp.c_str());
    }

    return 0;
}
0 голосов
/ 30 апреля 2019

Вы можете прочитать каждый символ, который печатает ваш клиент, и обращаться с ним правильно (иначе как вы хотите).Например, если вы хотите, чтобы в качестве входных данных использовались только целые числа, вы можете прочитать их, а если ваш пользователь отправляет вам символ, вы можете отправить ему обратно сообщение, вы можете заблокировать его от отправки других входных данных или просто игнорировать входные данные, которые вы не делаете.хочу.

int main () {
int x;
cin >> x; // i want the x to take only numbers
if(cin.fail()) {
    cout << "Invalid input" << endl; 
}

return 0;
}
...