Реализация прокрутки текста в C - PullRequest
4 голосов
/ 24 июля 2010

Мне недавно задали этот вопрос в одном из моих интервью с MNC.Вопрос был

«Нам нужно отобразить экран, на котором текст прокручивается внизу экрана, а оставшийся экран пуст. Как бы вы сделали это в C?использовать .. ?? "

Любые идеи, пожалуйста ...!

Ответы [ 5 ]

2 голосов
/ 24 июля 2010

Предполагая, что это консольное приложение, вы можете печатать новые строки примерно 24 раза, что ставит вас внизу.

Строка для печати сохраняется в массиве / векторе фиксированного размера из 81 символа0 заканчивается в позиции 81), которая обновляется после некоторой процедуры кормления.Это может потенциально произойти из сокета, набора текста, файла, вызывающего процесса и т. Д.текст по одному символу за раз.Предполагая, что вращение идет справа налево, скопируйте все символы с 1 (не 0) до 80 в i-1 предыдущей позиции.Напишите новый символ в позиции 80.

Ключевой графический трюк здесь заключается в том, чтобы завершить ваш printf символом \ r вместо \ n.\ r является модификатором для возврат каретки : курсор возвращается к столбцу 0 и не переходит на следующую строку.Это позволяет перепечатать одну и ту же строку.

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

Это может сработать.

    #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 голосов
/ 25 июля 2010

Когда мне пришлось сделать это в моем проекте C на конец года 3-4 года назад, я вспоминал, что я использовал Двухсторонний связанный список для поддержки прокрутки вперед и назад.Верт и Хорз реализации.Как это реализуется: каждая «Страница» - это отдельный узел в Linked-List, который сохраняет указатель на предыдущую и следующую страницу.установка положения курсора - чистые математические вычисления.

Я уверен, что это не лучший способ, но это способ.

Надеюсь, что это помогло,

Побежал.

0 голосов
/ 24 июля 2010

первый вопрос хорош .. но он не дает столько информации.

возможны и другие способы ... но я говорю вам, что вы можете сделать это в BGI Graphics, используемой в компиляторах Borland ...

Вы можете сделать следующее:

Просто поместите узкую полосу (длина меньше высоты экрана) в правой части экрана ... и тогда вам нужно включить указатель мыши с помощью прерывания ... еще одна вещь - цвет полосы прокрутки должен отличаться от фона ... и теперь наведите указатель мыши на панель и просто примените getPixel(x,y) func. (здесь x и y - координаты указателя мыши) ..
он даст вам цвет этого перкулярного пикселя и сравнит его с цветом полосы прокрутки ... если он совпадает, то у вас есть полоса прокрутки ... и вы можете двигаться вверх и вниз ...

и вы можете использовать связанный список в этом ...

если тебе нужна помощь с BGI .. дай мне знать… спасибо…

0 голосов
/ 24 июля 2010

Делая ряд предположений, о которых вы должны сообщить интервьюеру или спросить их о:

Поместите текст в круговой буфер, из текущего индекса выведите n символов, где n - ширина консоли. Выведите '\ r', чтобы вернуться в начало той же строки. Через некоторое время увеличьте индекс буфера и повторите.

Таким образом, структура данных, для которой они могли ориентироваться, представляет собой кольцевой или кольцевой буфер

Без какой-либо библиотеки консоли, кроме stdio, вы могли бы добраться до нижней части пустого экрана, просто напечатав h перевода строки, где h -> = высота консоли

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...