用户正在写入时 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()的主要内容,如果未能解决你的问题,请参考以下文章

如何:每隔一秒调用一个方法来实现 getchar() 或者如果它为空则继续

c语言中的getch与getchar 有啥区别?

C getchar() 刽子手游戏

getch与getchar区别

java 中有没有getchar和putchar函数呢?

gets() 和 getchar() 还有 getch() 的区别