2016-07-24 3 views
-1

Я делаю клиентскую базу данных на C, и я не мог найти способ, когда он перечисляет всех людей, когда консоль или окно заполнено, это приостанавливает печать на и отобразит сообщение типа «Нажмите клавишу, чтобы отобразить другую страницу», таким образом, как vi может показать следующую страницу одним нажатием ... Если кто-то знает, как быстро обходиться ...C: Пауза страница при заполнении

+1

Redirect это 'more' в командной строке. –

+0

да перенаправить его более или менее как ** $ yourprg | меньше ** –

+0

Вопрос настолько расплывчатый, что даже не ясно, является ли это проблемой программирования. – Olaf

ответ

-1

Вы можете попытаться выяснить, сколько строк имеет ваша консоль (в Linux: получить переменную $ROWS из среды). Затем перед печатью попробуйте очистить консоль. Вы могли бы позвонить по телефону system("cls"); //Windows или system("clear") //Linux или использовать символ ASCII printf("\033[2J");. Это гарантирует, что вы начнете в первой строке. Теперь вы можете просто использовать цикл как это:

for(int x = 0; x < TOTAL_ELEMENTS; x++) 
{ 
    if(x < COLS) 
    { 
     puts(rows[x]); 
    } 
    else 
    { 
     printf("Press [ENTER] to show the next line") 
     getchar(); 
     printf("\033[F\r"); // Go to beginning of previous line to override (Not that portable) 
     puts(rows[x]); 
    } 
} 

В противном случае, вы можете использовать пейджер как more (Windows/Linux) или most/less (Linux), как @Eugene предложил в своем комментарии

+0

Размер вашего терминала может и изменится. Этого недостаточно. – tadman

+0

Если я правильно помню, тогда переменная $ COLS будет обновляться всякий раз, когда изменяется размер. И если бы не было ncurses как альтернатива ... – mame98

+0

Да, но вам нужно послушать сигнал и обновить соответственно. Это обманчиво сложно, поэтому «проклятия» существуют. Бросание кодов ANSI на 'printf' только доводит вас до сих пор. – tadman

Смежные вопросы