如何在一段时间内重复一个过程,直到按下输入?

Posted

技术标签:

【中文标题】如何在一段时间内重复一个过程,直到按下输入?【英文标题】:How to repeat a process in a while until enter is pressed? 【发布时间】:2019-10-18 14:45:22 【问题描述】:

我需要重复一个过程,我正在使用一段时间。当按下回车键并且我正在使用 if(getchar()) 时,我需要执行另一个过程。问题是当它到达 if 时 while “暂停”,因为它正在检查 getchar() 是否为真。我需要知道如何在不停止检查是否有输入的情况下保持循环。 我正在制作一个游戏,你有 1 分钟的时间来猜测尽可能多的名字。所以 while() 的目的是从 60 秒倒计时到 0 秒(清除屏幕并打印新的秒数以及您实际上每秒猜测的名称)。所以我希望它继续运行 while() 以便计时器继续运行,但如果按下回车它只会将猜测的名称更改为新名称并且计时器继续运行。 (我不知道我是否清楚,但这是我的想法)

//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
    

我希望 while 继续循环,直到有输入。发生这种情况时,我希望它进入 if,退出 if 并继续循环。

【问题讨论】:

您是否在寻求一种禁用行缓冲的方法? 【参考方案1】:
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: ");
    

【讨论】:

【参考方案2】:

你不能使用if(getchar()=='\n') 所以程序一直运行直到按下回车键

因为 '\n' 的缓冲区值将存在,它会改变下一次迭代

【讨论】:

【参考方案3】:

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

while(//specific condition)

  /*--process to do
    -
    -
    -
    -*/
  if(kbhit()) 
  
      if (getchar() == 0x0d)
       
          break;
      
  
  //second process

在这个循环中,第二个进程将在不检查回车键的情况下运行,并且只有在按下回车键时才会退出。

【讨论】:

【参考方案4】:
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 等文件流输入来相应地执行此操作.

【讨论】:

以上是关于如何在一段时间内重复一个过程,直到按下输入?的主要内容,如果未能解决你的问题,请参考以下文章

如何计算一个话题在一段时间内的趋势率?

在Ansible中,如果系统在更新该行之前重新启动,如何重复获取文件直到存在一行?

Python:只要条件为真,在一段时间内重复执行操作

sql语句如何查找在一段时间内没有交易记录的用户

如何制作在一段时间内每天组合多个条目的折线图?

如何检测变量是不是在一段时间内没有变化?