2012-07-08 7 views
5

मैं एक साधारण ncurses कार्यक्रम की स्थापना की है के साथ उपयोग करना बैकस्पेस कि पात्रों getch() और उन्हें प्रतियां एक बफर में साथ एक समय में एक पढ़ता है। मेरे पास जो मुद्दा है वह बैकस्पेस कुंजी का एक प्रेस का पता लगा रहा है। यहाँ प्रासंगिक कोड है:ncurses

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

लेकिन जब इस कोड को चलाने का प्रयास, यह क्या लाइन से पात्रों को हटाने की कोशिश के बाद स्क्रीन पर दिखाई देता है "यह एक परीक्षण है" और buffer की सामग्री हैं:

this is a test 

gdb के साथ मुझे पता है कि अगर बयान हटाएं/बैकस्पेस के लिए जाँच बुलाया जा रहा है, इसलिए और क्या मैं इतना है कि मैं चा नष्ट कर सकते हैं कर किया जाना चाहिए racters?

+0

'यह एक परीक्षण ^? ^? ^?' 'Buffer' की सामग्री है, या इसे स्क्रीन पर दिखने वाली चीज़ों है? किसी भी तरह से, दूसरा क्या है? –

+0

'यह एक परीक्षण है ^? ^? ^?' टर्मिनल पर जो दिखाई देता है, बफर में 'यह एक परीक्षण है'। – Jumhyn

उत्तर

4

ऐसा लगता है कि ^? की तरह है क्या स्क्रीन पर गूँजती है जब आप एक डेल चरित्र दर्ज करें।

आप शायद delch() पर दो बार कॉल कर सकते हैं, लेकिन फिर आपको यह पता लगाना होगा कि कौन से वर्ण दो-वर्ण (या अधिक) अनुक्रमों के रूप में गूंजते हैं।

आपका सबसे अच्छा शर्त शायद noecho() फोन और स्पष्ट रूप से पात्रों मुद्रित अपने आप से है।

+0

यह पूरी तरह से काम करता है, यह वास्तव में मेरे कोड को थोड़ा क्लीनर भी बना देता है। इसके अतिरिक्त, मुझे बैकस्पेस की जांच करने से पहले 'i'' में कमी आई थी, क्योंकि मैं इसे बैकस्पेस की जांच करने से पहले बढ़ा रहा हूं। धन्यवाद! :) – Jumhyn

संबंधित मुद्दे