【问题标题】:C: Pause page when full [closed]C:满时暂停页面[关闭]
【发布时间】:2016-07-24 20:11:26
【问题描述】:

我正在用 C 语言创建一个客户端数据库,但我无法找到一种方法来列出所有人员,当控制台或窗口已满时,它会暂停打印到屏幕并显示如下消息“按一个键显示另一页”,就像 vi 一样,只需按一下即可显示下一页......如果有人知道如何快速解决这个问题......

【问题讨论】:

  • 在命令行中重定向到more
  • 是的,它或多或少地重定向到 $ yourprg |少
  • 这个问题很模糊,甚至不清楚这是不是一个编程问题。
  • 这通常是 the curses library 或类似的工作。

标签: mysql window


【解决方案1】:

您可以尝试计算您的控制台有多少行(在 Linux 上:从环境中获取 $ROWS 变量)。然后,在打印任何内容之前,请尝试清除控制台。您可以调用system("cls"); //Windowssystem("clear") //Linux 或使用ASCII 字符printf("\033[2J");。这可确保您从第一行开始。 现在你可以简单地使用这样的循环:

for(int x = 0; x < TOTAL_ELEMENTS; x++)
{
    if(x < COLS)
    {
        puts(rows[x]);
    }
    else
    {
        printf("Press [ENTER] to show the next line")
        getchar();
        printf("\033[F\r"); // Go to beginning of previous line to override (Not that portable)
        puts(rows[x]);
    }
}

否则,您可以使用more(Windows/Linux)或most/less(Linux)之类的寻呼机,就像@Eugene 在其评论中建议的那样

【讨论】:

  • 终端的大小可以并且将会改变。这还不够。
  • 如果我没记错的话,那么只要大小发生变化,$COLS 变量就会更新。如果没有,将有 ncurses 作为替代......
  • 是的,但是您需要收听信号并进行相应的更新。这看似困难,这就是curses 存在的原因。向printf 抛出 ANSI 代码只能让你走这么远。
  • 是的,ncurses 接缝是最好的(也是最便携的)方式
  • 谢谢,这正是我想要的。
猜你喜欢
  • 1970-01-01
  • 2012-07-18
  • 1970-01-01
  • 2018-01-31
  • 2021-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多