Как полностью перезаписать вывод в c - PullRequest
1 голос
/ 12 февраля 2020

Итак, я работаю над этой игрой стороннего проекта, и я хочу поместить ее в рамку / рамку. Затем я хочу постоянно печатать текст внутри этой границы: добавлять текст, удалять его, менять его и т. Д. c. Я посмотрел повсюду, и не могу найти печати внутри блока отдельно от фактического блока.

Моя текущая реализация - очистить экран, а затем перепечатать весь блок новым текстом, используя это:

 printf("\e[1;1H\e[2J");

Проблема в том, что я получаю этот очень неприятный эффект мерцания, потому что каждая итерация очистки моего экрана приводит к тому, что эта часть экрана становится черной в течение определенного периода времени.

Поэтому я ищу несколько решений.

  1. Как напечатать границу отдельно от оператора печати внутри нее. В настоящее время я реализую его так:

          printf("| |                        Hello There                     ||\n");
    

    , а затем повторяю это до конца, чтобы создать рамку.

  2. Как полностью перезаписать уже выведенный текст, чтобы этот мигающий эффект может go убежать. Итак, представьте, что вы удаляете строку, я хочу что-то в этом роде, которая удаляет весь текст и заменяет его новым набором текста
  3. Как изменить местоположение, где пользователь вводит данные в консоль, чтобы вы можно ввести в коробку

В основном это единственные решения, о которых я могу подумать, если у вас есть другие, я бы хотел их услышать

У меня также был общий вопрос о c.

conio.h, graphics.h, windows .h и некоторые другие заголовки не работают для моих компиляторов. Я использую Ubuntu, и они всегда приходят с ошибкой, говоря, что я не могу их использовать. Я ценю, что кто-то объяснил мне это.

Пожалуйста, дайте мне знать, что вы думаете, и если вам нужна дополнительная информация, я обязательно предоставлю ее

-Райан

Ответы [ 2 ]

3 голосов
/ 12 февраля 2020

conio.h и windows.h не являются стандартными Linux библиотеками, поэтому они не будут компилироваться на Linux, если вы не установите дополнительное программное обеспечение. Одним из решений было бы использование библиотеки, предназначенной для управления экраном, например ncurses .

0 голосов
/ 13 февраля 2020

Вы можете сделать это с помощью циклов и символов ASCII, подобных этому:

#include <stdio.h>

int main()
{
int i;
printf("\n\t\t═");
for(i=0;i<=20;i++)
{
    printf("═");

}

for(i=0;i<=22;i++)
{
printf("\t\t║\n");
if(i==10)
{
    printf("\t\t\tHello There \t\n");
}
printf("\t\t\t\t\t║\n"); 
}

printf("\t\t═");
for(i=0;i<=22;i++)
{
    printf("═");

}


return 0;
}
...