Tôi có một chương trình ncurses đơn giản được thiết lập để đọc từng ký tự một lần với getch() và sao chép chúng vào bộ đệm. Vấn đề tôi đang gặp là phát hiện một phím bấm của phím xóa lùi. Đây là mã có liên quan:Sử dụng backspace với 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();
}
Nhưng khi cố gắng chạy mã này, đây là những gì xuất hiện trên màn hình sau khi cố gắng xóa các ký tự từ dòng "này là một thử nghiệm":
this is a test^?^?^?
và các nội dung của buffer
là:
this is a test
với gdb tôi biết rằng câu lệnh if kiểm tra cho một xóa/xóa lùi đã được gọi, vì vậy những gì khác tôi cần phải làm như vậy mà tôi có thể xóa cha racters?
'Đây có phải là nội dung thử nghiệm ^? ^? ^? 'Nội dung của' bộ đệm', hay nó xuất hiện trên màn hình? Dù bằng cách nào, khác là gì? –
'đây là một thử nghiệm ^? ^? ^?' Là những gì xuất hiện trên thiết bị đầu cuối, bộ đệm chứa 'đây là một thử nghiệm'. – Jumhyn