Строка «Обновление» в CMD, C ++ - PullRequest
0 голосов
/ 07 октября 2019

Мне нужно получить ввод от пользователя, но если передан недопустимый аргумент, то сообщения "Invalid" складываются.
Я бы предпочел, чтобы он просто продолжал печатать недопустимый в той же строке, а затем один развведен правильный ввод, он сбрасывает строку в исходный вопрос.
Я видел разговоры об использовании \ r, но, похоже, он не работает для меня.

bool getInput(std::variant<std::string, float>* toOut, bool* restart, bool* qUsed){

    std::string userIn;
    std::cin >> userIn;

    if(userIn == SENTINAL){
        *restart = true; 
        return false;
    }

    try {

        *toOut = std::stof(userIn);

    } catch(std::invalid_argument) {

        if(userIn == TO_SOLVE && !*qUsed){
            *toOut = TO_SOLVE;
            *qUsed = true;
        } else {
            std::cout << "\rInvalid, please try again : ";
            getInput(toOut, restart, qUsed);
        }

    }

    return true;

}

Я не поставилпока не возвращаюсь к исходному вопросу.
Когда я запускаю эту команду, \ r ничего не делает.
Почему это / как лучше всего "обновить" текст cmd?

1 Ответ

0 голосов
/ 07 октября 2019
if (userIn != required_string)
{
//call the function in itself
}

это называется рекурсией

не уверен, как выглядит этот код из других частей вашего проекта.

вы также можете вернуть true, если правильно, и вернуть false, если еще... тогда просто сделайте цикл while или что-то в этом роде, пока все не получится правильно

кажется, что здесь много чего происходит только для пользовательского ввода

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...