2017-05-12 2 views
0

Bonjour Je possède ce code et le Backspace fonctionne pas correctementNCurses utilisant backspace

while((ch=getch())!='\n') { 
    ++counter; 
    noecho(); 
    if (ch == KEY_BACKSPACE || ch == KEY_DC || ch == 127) { 

     counter--; 
     delch(); 
     delch(); 
     input[counter] = '\0'; 
    } else 
    { 
     addch(ch); 
    } 
    refresh(); 

le caractère pour backspace n'apparaît pas qui est ce que je voulais, mais l'action ne se fait pas

+0

Avez-vous appelé 'keypad (stdscr, TRUE)'? –

+0

oui je l'ai appelé – user8005084

+0

Est-ce que ch est déclaré comme un 'int'? –

Répondre

1

Si echo est sur avant l'appel getch, ncurses peut renvoyer un retour arrière ASCII, par exemple, 8 (identique à \b). Cela est mentionné dans la source-code comme une caractéristique de compatibilité Solaris:

/* 
    * If echo() is in effect, display the printable version of the 
    * key on the screen. Carriage return and backspace are treated 
    * specially by Solaris curses: 
    * 
    * If carriage return is defined as a function key in the 
    * terminfo, e.g., kent, then Solaris may return either ^J (or ^M 
    * if nonl() is set) or KEY_ENTER depending on the echo() mode. 
    * We echo before translating carriage return based on nonl(), 
    * since the visual result simply moves the cursor to column 0. 
    * 
    * Backspace is a different matter. Solaris curses does not 
    * translate it to KEY_BACKSPACE if kbs=^H. This does not depend 
    * on the stty modes, but appears to be a hardcoded special case. 
    * This is a difference from ncurses, which uses the terminfo entry. 
    * However, we provide the same visual result as Solaris, moving the 
    * cursor to the left. 
    */ 
    if (sp->_echo && !(win->_flags & _ISPAD)) { 
    chtype backup = (chtype) ((ch == KEY_BACKSPACE) ? '\b' : ch); 
    if (backup < KEY_MIN) 
     wechochar(win, backup); 
} 

Une autre possibilité est que la description terminal (terminfo) ne peut pas d'accord avec les paramètres du terminal réels (stty). Dans ce cas, ncurses retournera quelle que soit la clé à envoyer (que ce soit ASCII DEL/127 ou BS/8 dépend du système que vous utilisez).