Ограничение количества символов вводимых пользователем

Я пытаюсь ограничить количество символов, которые может ввести пользователь.
Это не похоже на ввод пользователем abcde, и я ограничиваю длину ввода до 3,
и только abc учитывается.

Есть ли способ физически запретить пользователю вводить больше определенного количества символов?
Например, если пользователь попытается ввести 12345, и если я ограничу его до 3 символа, вводится только 123.

Я пробовал следующий код:

cin.width(5);
cin >> n;

Но я понял, что это не физически ограничивает пользовательский ввод, а ограничивает только размер буфера ввода.

Есть ли способ сделать что-то подобное?

+) Я работаю над консольным приложением


person Haxify    schedule 19.06.2013    source источник
comment
Вы можете прочитать каждую клавишу, а затем выполнить обработку, когда пользователь введет \r или 3. Но это не заблокирует дополнительные символы (он просто примет 3 символа при вводе пользователя и продолжит работу, не дожидаясь \r).   -  person Sellorio    schedule 19.06.2013
comment
Хм, хотел бы я сделать что-то подобное.   -  person Haxify    schedule 19.06.2013
comment
Что вы подразумеваете под физически? Вы хотите, чтобы рука вышла из экрана и ударила пользователя, когда он попытается ввести 4-й символ? :)   -  person Tony    schedule 19.06.2013
comment
@tony Я понятия не имел, как еще это описать :/   -  person Haxify    schedule 20.06.2013


Ответы (3)


Вы не можете сделать это в стандартном окне консоли, но если вы используете С++ для создания собственного окна с собственным полем ввода, у вас будет больше гибкости.

person David says Reinstate Monica    schedule 19.06.2013
comment
Можно ли сделать что-то подобное? - person Haxify; 19.06.2013
comment
@Haxify Конечно! многие игры написаны на C++ и имеют аналогичные ограничения для некоторых частей (например, выбор имени пользователя). Однако вы не можете сделать это из коробки С++. Вам нужно найти себе библиотеку. О, и я хотел сказать, что вы не можете сделать это в консоли. Извините, опечатка. - person David says Reinstate Monica; 19.06.2013
comment
Я мог заставить это работать в консоли. Это было бы не так красиво, как могло бы быть, но и не сложно. - person chris; 19.06.2013
comment
@chris Тогда вы должны опубликовать план ответа. - person David says Reinstate Monica; 19.06.2013
comment
@Dgrin91 Dgrin91, я не знаю ... Это может принести больше вреда, чем пользы, и это будет только для Windows. - person chris; 19.06.2013

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

person bdwain    schedule 19.06.2013

Возможно, вы ищете это: --

#include <iostream>
#include <string>

using namespace std;

int main()
{
    string MyInput;
    std::cout << "INPUT HERE: ";
    std::getline(cin,MyInput);
    if (MyInput.length() == 3)
    {
        std::cout << "OKAY IT IS THREE CHARS" << std::endl;
    }
    else if (!(MyInput.length() == 3))
    {
        MyInput.erase(MyInput.begin()+3,MyInput.end());
        std::cout << "Look: " << MyInput << std::endl;
    }
}
person user01234356    schedule 05.03.2016