Cin Показать значение по умолчанию

С C++ возможно ли дать пользователю значение по умолчанию с оператором Cin, а затем заставить их вернуться назад, что они хотят изменить? Например: я даю пользователю возможность изменить имя строки, я вывожу имя на экран: «Джон Доу», и они могут вернуться назад, чтобы изменить имя на «Джон Смит».


person Howdy_McGee    schedule 14.04.2013    source источник


Ответы (2)


Чтобы узнать о подобных функциях и многом другом, посетите GNU Readline или один из его аналогов. По сути, это библиотека для приложений, поддерживающая редактирование командной строки со знакомыми функциями, такими как стрелка вверх для повторения предыдущих команд, редактирование этих предыдущих команд, и да, вы можете настроить текст, представляемый пользователю, который затем может редактировать его с помощью тех же нажатия клавиш, которые можно было бы использовать в оболочке.

person John Zwinck    schedule 14.04.2013

Я могу быть сумасшедшим, но вот простое решение для Windows, которое работает с Visual Studio 2012 Update 1. Оно имитирует символы, которые вы хотите ввести, что должно держать их в буфере ввода, пока они не будут готовы к чтению, а затем считывает ввод, ждем новой строки.

#include <iostream>
#include <string>
#include <windows.h>

void InsertDefaultName(const std::string &def) {
    HWND hwnd = GetConsoleWindow();
    for (char c : def) {
        SendMessage(hwnd, WM_CHAR, c, 0);
    }
}

int main() {
    std::cout << "Enter name: ";
    std::string name;

    InsertDefaultName("John Doe");
    std::getline(std::cin, name);

    std::cout << "You entered " << name << '\n';
}

Стоит отметить, что это может работать не совсем правильно, если пользователь, скажем, удерживает клавишу до того, как она перейдет к вызову функции InsertDefaultName(). Более надежная библиотека, безусловно, лучше, но это здесь, если она работает достаточно хорошо для вас без совершенно новой библиотеки.

person chris    schedule 14.04.2013