У меня есть приложение Qt gui с функцией командной строки. Чтобы сделать эту работу, я добавил это в начало функции main()
:
#ifdef _WIN32
if (AttachConsole(ATTACH_PARENT_PROCESS)) {
freopen("CONOUT$", "w", stdout);
freopen("CONIN$", "r", stdin);
freopen("CONOUT$", "w", stderr);
}
#endif
Затем создается экземпляр моего основного класса. В конструкторе QCommandLineParser
определяет, есть ли какие-либо аргументы, и создает экземпляр класса синтаксического анализа cmdline или класса приложения gui.
В классе синтаксического анализа cmdline я прошу пользователя: введите определенные значения:
QString qanswer;
// `answerToInt` is an std::unordered_map
while (answerToInt.find(qanswer) == answerToInt.end()) {
std::cout << std::endl << "File will be overwritten:" << std::endl
<< path.toStdString() << std::endl
<< "Are you sure? " << (multiple ? "(Yes/YesAll/No/NoAll)" : "(Yes/No)") << std::endl;
std::string answer;
std::cin >> answer;
qanswer = QString::fromStdString(answer).toLower();
std::cin.clear();
}
Когда вводится «Да», «Нет», «ДаАлл» или «Нет данных» (без учета регистра), программа продолжает работу, как и ожидалось, но когда пользователь вводит что-то иное, чем это , cmd выдает это:
'[input]' не распознается как внутренняя или внешняя команда [...]
А затем "C: \ path \ to \ exe> "отображается снова, где пользователь может продолжать ввод, пока не будет набрано одно из правильных значений. После ввода правильной строки она снова продолжается, как и ожидалось.
Я пытался этот ответ , а также std::getline()
, но это не имеет значения.
Так как предотвратить появление ошибки и продолжить отображение cout
?