2012-07-08 23 views
5

Basit bir ncurses programına sahip olmak için, getch() ile karakterleri birer birer okur ve bir arabelleğe kopyalar. Sahip olduğum sorun, backspace anahtarının bir basın algılamasıdır. İlgili kod geçerli:ncurses ile backspace kullanma

this is a test^?^?^? 

:

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(); 
} 

Ama bu kodu çalıştırmak çalışırken, bu hattan karakterleri silmeye çalışırken sonra ekranda görünen şeydir "Bu bir denemedir" ve buffer içerikleri şunlardır: gdb ile

this is a test 

biliyorum ki bir silme/backspace kontrol deyimi çağrıldığını edilirse, bu yüzden başka ne ben cha silebilir, böylece yapıyor olmalı racters?

+0

'Bu bir test ^? ^? ^?' 'Buffer' içeriğidir ya da ekranda görünen nedir? Her iki durumda, diğeri nedir? –

+0

'Bu bir test ^? ^? ^?' Terminalde görünen, arabellek '' bir test '' içeriyor. – Jumhyn

cevap

4

Bir DEL karakteri girdiğinizde ekrana yankılanan, ^? gibi görünüyor.

Muhtemelen delch()'u iki kez arayabilirsin, ancak sonra hangi karakterlerin iki karakterli (veya daha fazla) sekans olarak yankılanacağını bulmalısın.

En iyi bahsiniz muhtemelen noecho() numaralı telefonu aramak ve karakterleri kendiniz yazdırmaktır.

+0

Mükemmel çalıştı, aslında benim kodumu biraz daha temiz yaptı. Buna ek olarak, ben bir backspace kontrol etmeden önce ben arttırma beri, ben 2 ile azaltmak zorunda kaldı. Teşekkürler! :) – Jumhyn