Использование kbhit () для приостановки вывода терминала? - PullRequest
1 голос
/ 30 сентября 2010

Сегодня я взял свою первую лабораторную сессию «Основы программирования» в университете. Одна вещь показалась мне странной: использование while(! _kbhit()) из conio.h (который, я уверен, является модулем C?) Для «приостановки» вывода на консоль.

Это лучший способ сделать это? На что мне нужно обращать внимание при его использовании? Мой репетитор абсолютно помешан? Я спрашиваю только потому, что это выглядело как грязный взлом, и я никогда не видел его раньше ни в одном из фрагментов кода C ++, на которые я смотрел.

Отмеченный вопрос как домашнее задание, потому что это связано со школой, но на самом деле это не домашнее задание. Если этот вопрос лучше CW, дайте мне знать.

Ответы [ 2 ]

2 голосов
/ 30 сентября 2010

Очень быстрый (и легко запоминающийся) способ сделать это - использовать getchar:

getchar();

Возможно, вам придется нажать Return после ввода вашего символа, в зависимости от stdin.режим буферизации.Возможно, вы можете использовать setvbuf, чтобы исправить это, но лично я просто всегда нажимаю Return.

Возможно, вы также используете C ++ iostreams.В этом случае вы захотите позвонить куда-нибудь:

std::ios::sync_with_stdio(true);
2 голосов
/ 30 сентября 2010

Использование conio.h (или хуже, вызов pause или аналогичных утилит с использованием system), как правило, плохая идея;это не очень портативный.Вместо этого можно использовать возможности cin:

#include <iostream>
#include <limits>

/* Either of these would work, AFAIK */
void pause() {
    std::cin.ignore(std::numeric_limits<std::streamsize>::max());
    std::cin.get();
}

void pause() {
    std::cin.ignore(std::cin.rdbuf()->in_avail());
    std::cin.get();
}

void pause() {
    std::cin.sync();
    std::cin.get();
}
...