2012-07-08 16 views
5

Ho un semplice programma ncurses che legge i caratteri uno alla volta con getch() e li copia in un buffer. Il problema che sto riscontrando è la rilevazione di una pressione del tasto backspace. Ecco il codice rilevante:Utilizzo backspace con ncurses

while((buffer[i] = c = getch()) != EOF) { 
    ++i; 
    if (c == '\n') { 
     break; 
    } 
    else if (c == KEY_BACKSPACE || c == KEY_DC || c == 127) { 
     i--; 
     delch(); 
     buffer[i] = 0; 
    } 
    refresh(); 
} 

Ma quando si tenta di eseguire questo codice, questo è ciò che appare sullo schermo dopo aver cercato di eliminare i caratteri della linea "questo è un test":

this is a test^?^?^? 

e il contenuto di buffer sono:

this is a test 

con gdb so che l'istruzione if verifica per una cancellazione/backspace è chiamata, in modo che altro dovrei fare in modo che possa eliminare cha racters?

+0

È 'questo è un test ^? ^? ^?' Il contenuto di 'buffer', o è ciò che appare sullo schermo? In ogni caso, qual'è l'altro? –

+0

'questo è un test ^? ^? ^?' È ciò che appare sul terminale, il buffer contiene 'questo è un test'. – Jumhyn

risposta

4

Sembra che ^? sia ciò che viene visualizzato sullo schermo quando si inserisce un carattere DEL.

Probabilmente è possibile chiamare il numero delch() due volte, ma in questo caso si dovrebbe capire quali caratteri sono come sequenze di due caratteri (o più).

La soluzione migliore è probabilmente chiamare noecho() e stampare esplicitamente i caratteri.

+0

Che ha funzionato perfettamente, ha reso il mio codice un po 'più pulito. Inoltre, ho dovuto decrementare 'i' per 2, dal momento che lo sto incrementando prima di cercare un backspace. Grazie! :) – Jumhyn