getchar() пока пользователь пишет

Я моделирую телевизионную игру в программе подсказки C. У игрока есть 60 секунд, чтобы угадать слово, и когда он его находит, он должен нажать Enter, чтобы получить новое: слово меняется, а количество слов и оставшееся время увеличиваются. Поскольку часть «ввод слушателя» является getchar, я предположил, можно ли в реальном времени обновить оставшееся время секунда за секундой, ожидая нажатия ввода с помощью getchar().

while(1) {
        system("clear"); //RAND WORD
        parola = parole[rand() % n]; //PRINT WORDS, NEW WORD, SECONDS LEFT
        printf("\n\n[%d]\t\t%s\t\t%d", indovinate, parola, secLeft);

        gettimeofday(&initTime, NULL);
        int initSec = initTime.tv_sec; //WAIT FOR PAYLER TO PRESS ENTER
        getchar();

        gettimeofday(&tookTime, NULL);
        int tookSec = tookTime.tv_sec - initSec; //UPGRADE TIME TOOK
        secLeft -= tookSec;

person Tom Riddle    schedule 08.06.2019    source источник
comment
Да, это возможно. Но спрашивать, как это сделать, — это путь к широкому вопросу.   -  person klutt    schedule 08.06.2019
comment
Это было бы намного проще сделать с консольной библиотекой, такой как ncurses или даже readline.   -  person rici    schedule 08.06.2019
comment
не уверен, на какой ОС вы работаете, но неблокирующий системный вызов, такой как select или poll, можно использовать для проверки наличия символов для чтения, и если их нет, вы просто обновляете время и цикл   -  person NathanAck    schedule 08.06.2019


Ответы (2)


попробуйте kbhit(), это часть библиотеки conio.h. Он в основном проверяет, нажата ли клавиша. Если это не так, вы можете обновить время. если это так, вы можете ввести ответ.

if(kbhit()){
    a = getch();
}
else{
    //update time
}

вы можете использовать getch(), игроку не нужно нажимать клавишу ввода.

Там могут быть лучшие способы сделать это, чем c. (Не спрашивайте меня, я такими вещами не занимаюсь)

Но если это просто крутой проект, вперед.

person zerii    schedule 09.06.2019

вы можете использовать задержку dos.h с kbhit() из conio.h, задержка (время) принимает целое число как время, чтобы приостановить выполнение программы на это количество «времени»

int i=0;
while (i<60||!kbhit())       // wait till i reach value 60 or key is pressed
 {//doing the stuff
  i++;}
if (i==60)
printf("\n sorry but the time out you may try next time");```

person Shahil Nara    schedule 09.06.2019