2014-01-13 4 views
0

Я пытаюсь разработать программу, в которой мне нужно проверить, дал ли пользователь ввод ввода или нет. Если пользователь не вводит никаких данных, должен быть выполнен блок операторов, и если пользователь дает ввод, выполняются некоторые другие операторы. Использование getche() или getchar() требует ввода ввода, но мне нужно, чтобы программа выполнялась, даже если вход не подавался. Можно ли сделать это? Мне нужно многозадачность, и поэтому выполняйте одну функцию непрерывно и многократно, и в то же время просите ввода для запуска отдельной функции. Даже если пользователь не вводит программу, она должна продолжаться. Я думал, что если время выполнения между двумя частями программ очень низкое, и я повторяю фрагмент каждой функции многократно внутри цикла, это похоже на многозадачность. спасибо ..как проверить, введен ли пользователь или нет?

+0

И как программа узнает, намерен ли пользователь ввести ввод или нет? – interjay

+0

во всей программе, которую вы проверяете для ввода только один раз, а остальная часть функции выполняется автоматически (и быстро) внутри цикла. – user3124361

+0

, поэтому программе не нужно знать, внесут ли я вход или нет. Я просто нажимаю свой ключ для ввода, пока не встречу проверку на вход внутри цикла, что происходит довольно быстро (я надеюсь) (прошу прощения, если я ошибаюсь, потому что это всего лишь месяц с тех пор, как я начал учиться в) – user3124361

ответ

2

В Linux вы можете põll stdin:

bool isKeyPressed(int timeout) { 
    struct pollfd fds[1]; 
    fds[0].fd  = STDIN_FILENO; 
    fds[0].events = POLLIN | POLLPRI; 
    return poll(fds, 1, timeout) > 0; 
} 

В Windows есть кое-что эквивалентно:

bool isKeyPressed(int timeout) { 
    DWORD res = WaitForSingleObject(GetStdHandle(STD_INPUT_HANDLE), timeout); 
    return res == WAIT_OBJECT_0; 
} 
0

Вы можете проверить на конец файла на stdin с помощью feof.

Смежные вопросы