#c #return #ncurses #tui
#c #Возврат #ncurses #tui
Вопрос:
#include <ncurses.h>
int main(int argc, char ** argv)
{
initscr();
while(1){
int c = getch();
if(c == 'q'){
break;
}
}
return 0;
}
Хорошо, извините за плохое форматирование, но это код.
Все работает нормально, терминал улавливает любой символ, который я нажимаю, но когда я нажимаю ENTER, я не могу получить новую строку.
Почему?
Спасибо
Комментарии:
1. Откуда вы знаете, что не получаете новую строку? Отладчик? Оператор печати, который вы пропустили в примере?
2. Я запустил это с терминала, и когда я нажимаю ENTER, курсор возвращается к (0,0) в той же строке. просто попробуйте скомпилировать.
3. К сожалению, в данный момент я не в состоянии запустить код — окно Windows без установленной библиотеки curses. Если вы распечатаете
c
, вы когда-нибудь получите 10?4. Да! Если я нажму кнопку ВВОДА, выведите 10
5. Отлично. Вы получаете новую строку. Почему кажется, что вы получаете возврат каретки на консоли, к сожалению, выше моего уровня оплаты.
Ответ №1:
у curses есть функция для этого:
Процедуры
nl
иnonl
определяют, преобразует ли базовое устройство отображения клавишу возврата в новую строку при вводе.
В комментарии к исходному коду упоминается ICRNL
:
/*
* Simulate ICRNL mode
*/
if ((ch == 'r') amp;amp; sp->_nl)
ch = 'n';
что является функцией POSIX termios:
CR
Специальный символ при вводе, который распознается, если
ICANON
установлен флаг; это символ <возврат каретки> . КогдаICANON
иICRNL
установлены иIGNCR
не установлены, этот символ должен быть преобразован вNL
, и должен иметь тот же эффект,NL
что и символ an . Она не может быть изменена.