Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Обновление текста, отображаемого на терминале

Автор вопроса: syco_linkОтветов: 2

Я пытаюсь создать программу игры в жизнь на C, но я не очень хорошо знаком с процессом обновления вывода, отображаемого на терминале.

Так, например, у меня будет массив 2d char, где каждый элемент будет содержать либо "#", либо "-". Я буду печатать этот массив на экране, но вместо того, чтобы печатать новый массив 2d каждый раз, когда происходит изменение состояния, я хочу перезаписать старый массив в терминале новым состоянием.

Я искал способы сделать это, но мне не повезло. Самое близкое, что я нашел, это возврат каретки в функции printf (\r), но, надеюсь, кто-нибудь подскажет, как это сделать лучше всего.

В частности, как я мог распечатать 2d-массив на экране, изменить элементы массива и распечатать новый массив ПОВЕРХ старого, т.е. перезаписать его.

  • У вас есть конкретный вопрос? this 22.04.2014
  • я обновил вопрос syco_link 22.04.2014
  • Что ты имеешь в виду под словом сверху? this 22.04.2014
  • Windows, Linux, iOS...? ryyker 22.04.2014
  • Извините, платформа Linux syco_link 22.04.2014
  • Хорошо, вы видите что-нибудь в любом из ответов, опубликованных до сих пор? Некоторая обратная связь по этим комментариям и/или ответам была бы хорошей. Таким образом, если мы пропустим отметку, вы можете сообщить нам, где. ryyker 22.04.2014

clinuxarraysoutputprintf

Ответы

Ответ 1 · рейтинг 1 · ryyker

(некоторые из этих ссылок и фрагментов кода относятся к Linux, а другие - к Windows)
С учетом ваших конкретных вопросов (и при условии, что вы знаете, как записать массив в консоль):

1) запишите первый массив.
2) Затем очистите консоль (или над написать консоль)
Примерно так:

#include <stdlib.h>

void main()
{
   system("cls");
}

Или напишите в стандартный вывод следующее: (Linux)

write(1,"\E[H\E[2J",7);

это то, что делает /usr/bin/clear, за исключением того, что он не создает другой процесс.
Или и то, и другое:

 void clear_screen()
 {
  #ifdef WINDOWS
     system ( "CLS" );
  #else
     // Assume POSIX
     system ( "clear" );
  #endif
 }

Дополнительные параметры здесь

3) записать следующий массив

Ответ 2 · bubble

Вы можете попробовать что-то вроде этого:

#include<stdio.h>

int main(void)
{

printf ("#####-----\r");
printf ("-#####----\r");

}

Не уверен, что действительно ответил на ваш вопрос. И если это не ваш ответ, то вы определенно ищете что-то вроде ncurses.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы