用户正在写入时 getchar()
Posted
技术标签:
【中文标题】用户正在写入时 getchar()【英文标题】:getchar() while user is writing 【发布时间】:2019-06-08 16:48:48 【问题描述】:我正在用 C 提示程序模拟电视游戏。玩家有 60 秒的时间猜一个单词,当他找到它时,他必须按 Enter 才能得到一个新的单词:单词改变,单词数量和剩余时间升级。 因为“输入侦听器”部分是一个 getchar,所以我猜测是否可以在使用 getchar() 等待输入时,逐秒实时升级剩余时间。
while(1)
system("clear"); //RAND WORD
parola = parole[rand() % n]; //PRINT WORDS, NEW WORD, SECONDS LEFT
printf("\n\n[%d]\t\t%s\t\t%d", indovinate, parola, secLeft);
gettimeofday(&initTime, NULL);
int initSec = initTime.tv_sec; //WAIT FOR PAYLER TO PRESS ENTER
getchar();
gettimeofday(&tookTime, NULL);
int tookSec = tookTime.tv_sec - initSec; //UPGRADE TIME TOOK
secLeft -= tookSec;
【问题讨论】:
是的,有可能。但是询问如何做到这一点是一种广泛的问题。 使用ncurses
甚至readline
之类的控制台库会更容易实现。
不确定您使用的是什么操作系统,但是可以使用诸如 select 或 poll 之类的非阻塞系统调用来检查要读取的字符,如果没有,您只需更新时间和循环
【参考方案1】:
试试kbhit()
,
它是conio.h
库的一部分。
它基本上检查是否按下了键。如果不是,您可以更新时间。如果是,您可以输入答案。
if(kbhit())
a = getch();
else
//update time
你可能想使用getch()
,它不需要玩家按回车。
可能有比 c 更好的方法来做到这一点。 (别问我,我不会做这种事)
但如果这只是一个很酷的项目,那就继续吧。
【讨论】:
【参考方案2】:你可以在 conio.h 的 kbhit() 中使用 dos.h 的延迟 延迟(时间)将整数作为时间来暂停程序执行该“时间”量
int i=0;
while (i<60||!kbhit()) // wait till i reach value 60 or key is pressed
//doing the stuff
i++;
if (i==60)
printf("\n sorry but the time out you may try next time");```
【讨论】:
以上是关于用户正在写入时 getchar()的主要内容,如果未能解决你的问题,请参考以下文章