Как узнать, превысит ли мой следующий вызов printf () размер экрана - PullRequest
0 голосов
/ 29 мая 2020

Я пишу программу на C, и мой вопрос довольно прост: как узнать, превысит ли мой следующий вызов printf() размер экрана?

То есть иногда при использовании печати текст может не умещаться на одном экране. Например, у меня есть 4-5 строк для печати, и я хотел бы создать функцию, которая печатает весь текст или печатает до тех пор, пока текст не будет обрезан из-за размера экрана.

Ответы [ 2 ]

1 голос
/ 29 мая 2020

Вы можете использовать snprintf для записи в строковый буфер, а затем записать этот буфер в фактический вывод консоли. Поскольку кажется, что вы не можете контролировать количество символов, которые хотите написать, я предлагаю использовать int snprintf( char* buffer, std::size_t buf_size, const char* format, ... ). Он позволяет ограничить количество записываемых символов, чтобы избежать переполнения буфера:

char buffer[80+1];  // maximum length of a complete line.
snprintf(buffer, sizeof(buffer), "my output: %d, %s", someInt, someString);
if (strlen(buffer) >= nrOfCharsLeftInLine) {
   buffer[nrOfCharsLeftInLine] = 0x0;
}
printf("%s",buffer);
0 голосов
/ 16 июня 2020

Согласно Как очистить экран консоли в C? , «C не понимает концепции экрана. Так что любой код не может быть переносимым». Итак, чтобы сделать мой вопрос более конкретным c, я ищу способ выполнить вышеуказанное в среде UNIX.

Я перефразирую свой вопрос:

Иногда, когда вы используете print, текст может не уместиться на одном экране. Например, у меня есть 4-5 строк для печати, и я хотел бы создать функцию, которая печатает до тех пор, пока текст не будет обрезан, потому что он не может поместиться в доступный размер экрана.

Я ожидал бы существования системной функции (системы UNIX), который срабатывает, когда монитор прокручивает страницу вниз, чтобы "следовать" за распечатанным выводом. То есть, когда кто-то продолжает печатать в терминале, терминал автоматически прокручивается вниз, чтобы вы могли контролировать вывод на печать. Такое существует?

...