如何在一段时间内重复一个过程直到按下回车键?

时间:2019-06-03 03:07:16

标签: c while-loop

我需要重复一个过程,我正在使用一段时间。按下Enter键并且使用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 :(得分:0)

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: ");
    }
}

答案 1 :(得分:0)

您不能使用if(getchar()=='\n') 因此程序将一直运行,直到按下Enter键为止

因为将出现'\ n'缓冲区值,它将更改下一次迭代

答案 2 :(得分:0)

如果您的环境中有conio.h可用,则可以使用kbhit

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

在此循环中,第二个过程将在不检查回车键的情况下运行,并且仅在按下回车键时退出。

答案 3 :(得分:0)

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);
}

您没有给出足够的代码来了解正在使用的输入流,但是如果是文件流或字符串,则可以通过用fgets替换scanf或文件流输入(例如fscanf或fread)来执行相应的操作