如何在一段时间内重复一个过程,直到按下输入?
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 等文件流输入来相应地执行此操作.
【讨论】:
以上是关于如何在一段时间内重复一个过程,直到按下输入?的主要内容,如果未能解决你的问题,请参考以下文章