kbhit() с двойным циклом не работает должным образом

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

#include <stdio.h>
#include <conio.h>

int main()
{
  while(1)
  {
    if(kbhit())
    {
      while(1)
      {
        if(kbhit())
        {
          goto out;
        }
        printf("Print Ed Infinitum Until Key Press");
      }
    }
  }
  out:
  return 0;
}

Как мне это решить?


person user2178841    schedule 23.06.2013    source источник
comment
Не используйте переходы (Кроме того, вы, вероятно, имеете в виду до бесконечности ;))   -  person Kninnug    schedule 23.06.2013
comment
нет, есть несколько мест, где многие пользователи советовали использовать goto. Я изучил stackoverflow. com/questions/245742/ и несколько других постов.   -  person user2178841    schedule 23.06.2013
comment
В этом случае вы можете легко избежать goto, сразу же вернувшись в if. Если вам нужно выполнить дополнительную очистку перед выходом, goto может быть более оправданным.   -  person Kninnug    schedule 23.06.2013


Ответы (1)


  1. Программа начинается
  2. Нет ключей
  3. Второй while не выполняется
  4. Он вращается в первом цикле

Вы нажимаете клавишу:

  1. первый kbhit возвращает true
  2. Он входит во второй цикл
  3. там еще ключ присутствует
  4. второй kbhit возвращает true
  5. программа выходит

Вам нужно удалить первое нажатие клавиши перед входом во второй цикл, и вы должны предложить себе нажать клавишу, чтобы начать программу. Или вы можете просто перейти во второй цикл.

person Community    schedule 23.06.2013