Ваша проблема была достаточно интересной, и я не мог остановиться, пока не заставил ее "работать":
#include <curses.h>
#include <unistd.h> // For sleep()
#include <string.h> // For strlen()
#include <stdlib.h> // For malloc()
int main(int argc, char* argv[])
{
char *text = "Hello, how are you? ";
char *scroll;
int text_length;
int i, max_x, max_y;
// Get text length
text_length = strlen(text);
// Initialize screen for ncurses
initscr();
// Don't show cursor
curs_set(0);
// Get terminal dimensions
// getmaxyx(stdscr, max_y, max_x);
// Clear the screen
clear();
getmaxyx(stdscr, max_y, max_x);
scroll = malloc(2 * max_x + 1);
for (i=0; i< 2*max_x; i++) {
scroll[i] = text[i % text_length];
}
scroll[2*max_x - 1]='\0';
// Scroll text back across the screen
for (i=0; i < 10000; i++) {
mvaddnstr(0,0,&scroll[i%max_x], max_x);
refresh();
usleep(20000);
}
// Wait for a keypress before quitting
getch();
endwin();
return 0;
}
Обратите внимание, что я обманул :) (a) Я дублирую строку на более чем достаточно большой, чтобы всегда заполнять экран (в два раза больше ширины) (b) Я не прокручиваю место печати, я прокручиваю text , который я прошу напечатать (c) Я просто поместил пробел в исходную строку ввода, потому что это было проще, чем вставить пробел через другой механизм.
О да, я убрал вызов clear()
, он сделал экран слишком грязным, чтобы его было действительно видно Мы перезаписываем одни и те же max_x
ячейки снова и снова, не нужно очищать весь экран.
Надеюсь, это поможет.