Прокрутка текста в C - PullRequest
       32

Прокрутка текста в C

0 голосов
/ 28 февраля 2011

Я бы хотел непрерывно прокручивать текст на экране. Например,

text="Hello, how are you"

Вывод должен быть:

Hello, how are you Hello, how are you
Hello, how are you Hello, how are you

и вращается справа налево.

Пока я скомпилировал это:

#include <curses.h>
#include <unistd.h> // For sleep()
#include <string.h> // For strlen()

int main(int argc, char* argv[])
{

char *text = argv[1];

char *text = "Hello, how are you";
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();

// Scroll text back across the screen

while(1)

{

getmaxyx(stdscr, max_y, max_x);

if((max_x - text_length)<=1)
i=max_x;
else
i=(max_x - text_length);


for (i ; i > 0; i--)

{
    clear();

    mvaddstr(0,i,text);
    refresh();
    usleep(20000);
}
}
// Wait for a keypress before quitting
getch();

endwin();

return 0;
}

Кто-нибудь может помочь изменить код и сделать это?

Ответы [ 3 ]

0 голосов
/ 28 февраля 2011

Ваша проблема была достаточно интересной, и я не мог остановиться, пока не заставил ее "работать":

#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 ячейки снова и снова, не нужно очищать весь экран.

Надеюсь, это поможет.

0 голосов
/ 20 июня 2017
 1. 

    /*this one is easy to understan*/


                #include <stdio.h> 
            #include <conio.h> 
            #include <string.h> 
            //library for sleep() function 
            #include <unistd.h> 
            void main() 
            { 
                int i,j,n,k; 

            //text to be srolled 
                  char t[30]="akhil is a bad boy"; 

            n=strlen(t); 

                for(i=0;i<n;i++) 
                 { 
                    printf("\n"); 

                   //loop for printing spaces 

                      for(j=20-i;j>0;j--) 
                         { 
                                printf(" "); 
                         } 

                  /*printing text by adding a                  character every time*/ 

                 for(k=0;k<=i;k++) 
                  { 
                      printf("%c",t[k]); 
                   } 

            // clearing screen after every iteration 

            sleep(1); 
            if(i!=n-1) 
            clrscr(); 
               }   
 }
0 голосов
/ 28 февраля 2011

Просто используйте индекс в массиве и выведите один символ с помощью putchar () в правильном расположении экрана. Попробуйте взгляните на эту ссылку, может быть, она поможет вам http://www.dreamincode.net/code/snippet1964.htm

...