Как повторить процесс до тех пор, пока не будет нажата кнопка ввода? - PullRequest
2 голосов
/ 03 июня 2019

Мне нужно повторить процесс, и я использую некоторое время. Мне нужно сделать другой процесс, когда нажата клавиша ввода, и я использую if (getchar ()). Проблема в том, что while "делает паузу", когда попадает в if, потому что проверяет, верно ли getchar (). Мне нужно знать, как продолжать цикл без остановки, чтобы проверить, есть ли вход. Я делаю игру, в которой у вас есть 1 минута, чтобы угадать как можно больше имен. Поэтому цель while () - обратный отсчет от 60 до 0 секунд (очищает экран и печатает новую секунду и имя, которое вы на самом деле угадываете каждую секунду). Поэтому я хочу, чтобы он продолжал выполнять while (), чтобы таймер продолжал работать, но если нажать Enter, он только меняет предполагаемое имя на новое имя, а таймер продолжает работать. (Я не знаю, ясно ли я, но это идея)

//program in c

while(//specific condition)
{
  /*- here goes the code for a timer that every second it clears the
    - terminal and prints the next number (in seconds).
    -
    -
    -*/
  if(getchar()) //the current program stops here and keeps running the loop 
                //until enter is pressed
    {
      //second process
    }
}

Я ожидаю, что какое-то время будет продолжаться до тех пор, пока не появится вход. Когда это произойдет, я хочу, чтобы он вводил if, выходил из if и продолжал цикл.

Ответы [ 4 ]

0 голосов
/ 03 июня 2019
char a;
printf("Enter charecter or press enter to exit:");
scanf("%c",&a);
while(1)
{
    //process 1 loop
    if (a == '\n')
    {
        // process 2 here, if process two has loop make it's own loop here
        printf("we are in process 2\n");
        break;
    }
    getchar();
    printf("Enter charecter or press enter to exit:");
    scanf("%c",&a);
}

Вы не дали достаточно кода, чтобы понять, с каким входным потоком вы работаете, но что-то вроде этого сделает это, если это будет файловый поток или строка, сделав это соответствующим образом, заменив scanf на fgets или входные данные файлового потока, такие какfscanf или fread.

0 голосов
/ 03 июня 2019

Вы не можете использовать if(getchar()=='\n'), поэтому программа будет работать до тех пор, пока не будет нажата клавиша ввода

, поскольку будет присутствовать значение буфера '\ n' и оно изменит следующую итерацию

0 голосов
/ 03 июня 2019

если в вашей среде доступно conio.h, вы можете использовать kbhit

while(//specific condition)
{
  /*--process to do
    -
    -
    -
    -*/
  if(kbhit()) 
  {
      if (getchar() == 0x0d)
      { 
          break;
      }
  }
  //second process
}

В этом цикле второй процесс будет выполняться без проверки клавиши ввода и завершится только при нажатии клавиши ввода,

0 голосов
/ 03 июня 2019
char buffer[100];
while (fgets(buffer, sizeof(buffer), stdin))
{
        if (strlen(buffer) == 1)
        break;   

    if (sscanf(buffer, "%f", &f) == 1)
    {
        total += f;
        printf("Enter another number: ");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...