繁体   English   中英

是否可以在有限的时间内显示printf()语句nc?

[英]Is it possible to display a printf() statement for a limited amount of time n c?

我是编码的初学者,我被指示编写基于文本的游戏,所以我试图弄清楚是否可以在C中打印一段有限时间的语句, 是否也可以让他们输入一个在有限的时间内回答 问题是如果我打印出来的东西,它们可以向上滚动,这就是我想要避免的。 如果可能,请输入我可能用于下面参考的代码或资源。 谢谢。

默认情况下,终端设计为在缓冲区中逐渐发出越来越多的文本行。 文本被添加到末尾,前面的行仍然可见(达到终端配置的缓冲区大小的限制)。

通过改变终端模式可以获得更多的“GUI”感觉,这通常使用像cursesncurses这样的库来完成。 这将允许您在窗口的特定部分显示文本,并删除所述文本。 在结束程序时, curses “重置”终端,使得整个“GUI”消失(尽管一些终端仍然向用户显示GUI的“最终状态”,如果他们向上滚动页面)。

一个代码示例是关于如何使用ncurses的教程,这对于这种介质来说有点过于宽泛,但不难发现。

由于你是初级课程,你可能会被鼓励去做下一个最好的事情,那就是:

  1. 通过流式回车然后用空格或替换文本覆盖旧行来“伪造”消失的文本(支持此效果各不相同),或者
  2. 通过流式退格字符“伪造”消失的文本(支持此效果各不相同),或
  3. 完全没有这样做,而是继续前进到下一行

在上述所有情况下,除#3外,实施“计时器”的责任应由您自己承担。

您可以打印退格键以删除刚刚显示的文本。 像这样:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

int main() {

    char * string = "Hello";

    printf("%s", string);

    fflush(stdout);

    sleep(1);

    char * backspaces = malloc(strlen(string) * sizeof(char));

    for (int i = 0 ; i < strlen(string) ; i++) backspaces[i] = '\b';

    printf("%s", backspaces);
}

对于有限时间的有效输入,您可以使用gettimeofday来检查输入是否在时间内。

使用ANSI转义命令1)记住光标当前所在的位置2)printf该行(并记住printf()返回的值3)当定时器/闹钟到期时启动定时器(例如使用alarm() )信号将被提升。 使用信号标记事件,然后在主代码中:如果signalflag断言,使用ANSI转义序列将光标移动到保存/记住的位置,然后写入从原始printf()返回的长度的空间数据。 然后恢复光标

您可以使用\\r来将打印光标带到行的开头。 所以你可以替换那些内容,以达到在某段时间后删除内容的效果

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM