Новая строка с ncurses в c

#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

Процедуры 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 . Она не может быть изменена.