gpt4 book ai didi

c - 如何在终端上滚动消息?

转载 作者:太空狗 更新时间:2023-10-29 11:44:23 24 4
gpt4 key购买 nike

我正在尝试编写一个程序作为选取框,使用 curses.h 库 创建横向滚动显示。

应该发生的是,我的消息“Hello”应该从终端的右侧逐个字符地滚动到左侧。

“hello”应该像这样在终端上滚动:

|                                              H| // fist frame of animation

| He| //2nd

| Hel| //3rd
...
| Hello | // some time in the middle of animation

|Hello | // finished.

我的程序没有在终端上滚动,而是简单地在终端左侧输出“Hello”消息,就好像它已完成一样。

我认为打印适当数量的空格然后打印适当数量的字符串字符每帧就可以了。

我做错了什么?

下面是我目前的代码:

#include    <curses.h>
#include <string.h>
main()
{
char message[] = "Hello";
int max_y, max_x; // max dimensions of terminal window
int text_length;
int i,row=0,col=0,spaces=0;

// Get text length
text_length = strlen(message);

// Get terminal dimensions
getmaxyx(stdscr, max_y, max_x);

// num of spaces needed to print
spaces = max_x -1;

initscr(); // initialize curses
clear(); // clear screen to begin

while(1)
{
clear(); // clear last drawn iteration
move(5,col);
// print spaces as necessary
for(i=0;i<spaces;i++)
{
addch(' ');
}
refresh();
// print appropriate number of characters of the message
for(i=0;i<text_length || i<max_x; i++)
{
addch(message[i]);
}
refresh();
usleep(50000); // wait some time
spaces = spaces-1; //adjust spaces need for next iteration
}
}

最佳答案

第一个问题是你调用getmaxyx()之前 initscr() .在这种情况下,stdscr尚未初始化,因此 getmaxyx() 返回的值毫无意义。 (我为每个值得到 -1,又名 ERR。)

已修复,程序基本上可以运行,但在“Hello”字符串后打印垃圾。您可以通过更改 for 循环测试来解决该问题,text_length || i<max_x , 至 text_length && i<max_x ,尽管结果可能仍然不是您想要的。但我会留给您解决这个问题。

最后,作为风格问题,我建议使用 curses 自己的 napms()函数而不是 usleep() (即 napms(50) 而不是 usleep(50000) )。但如果你坚持使用 usleep() , 你应该添加 #include <unistd.h>在顶部。

关于c - 如何在终端上滚动消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27161531/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com