как печатать в c, не переходя в конец текста? - PullRequest
0 голосов
/ 25 августа 2018

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

Я пытаюсь напечатать (в с) довольно длинный текст, используя printf (), но, поскольку он не может уместиться на экране, он переходит к концу текста, и начало не видно, если вы не прокрутите его вверх. Есть ли простой способ заставить его печатать длинный текст, но оставаться в начале и позволить пользователю прокручивать текст вниз, пока он не введет следующую команду?

Ответы [ 3 ]

0 голосов
/ 25 августа 2018

В Unix (включая Linux и Mac) есть встроенные программы командной строки с именами more и less , которые выполняют именно то, что вы описываете.more - это программа, которая просто ждет, пока пользователь нажмет клавишу ввода или пробел, прежде чем отобразить следующую страницу вывода.less немного улучшен тем, что позволяет клавишам редактора vi (таким как j и k) прокручивать вверх и вниз в выводе.

more также доступно в командной строке Windows.Возможно, вам даже удастся найти версию less для Windows .

c:\users\selbie> your_program.exe | more

$> ./your_program | less

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

0 голосов
/ 25 августа 2018

Не стандартно, нет.

Ваш выходной поток в C - это просто поток символов - прокрутка обрабатывается вашим терминалом.

В зависимости от вашего терминала, можно управлять прокруткой, выводя специальные символы, такие как Экранирующие коды ANSI . Библиотека ncurses предоставляет переносимый способ управления терминалами.

Однако, если вы просто хотите более удобный способ просмотра выходных данных (или действительно любых выходных данных команды), ответ @ selbie является лучшим: используйте more или less. Это позволит избежать дополнительных сложностей в вашей программе.

0 голосов
/ 25 августа 2018

Не совсем, хотя вы можете найти разумное и простое решение - напечатать только определенное количество строк (скажем, 30), а затем предложить пользователю нажать Enter, прежде чем отобразить больше строк.

Вы можете дажеузнать текущий размер терминала.Это зависит от платформы;для Linux это объясняется здесь: Как узнать ширину окна терминала?

...