2012-11-15 45 views
8

tôi có chương trình này trong C mà đọc đầu vào như thế này:Tại sao tôi không thể đọc Ctrl + S trong C?

cod1 = getch(); 
    if (kbhit()) 
    cod2 = getch(); 

tôi có thể đọc mỗi Ctrl + Char chuỗi có thể, trừ Ctrl + C, đó đóng chương trình - đó là OK và Ctrl + S, đơn giản là không bắt được. Nhưng tôi muốn tạo Ctrl + S làm chức năng lưu trong chương trình của tôi; làm thế nào tôi có thể làm điều đó? Ngoài ra, bạn có thể đọc Alt + Char ký tự? Vì nó đọc nó như một ký tự thông thường, ví dụ: Alt + A được đọc với cùng mã như A.

+2

Bạn có thể đã định cấu hình tty để Control-S = XOFF (tạm dừng đầu ra). –

+0

Cố gắng tránh sử dụng thư viện conio.h nó không phải là chính thức và không hoạt động trong một số IDES như Visual Studio. –

Trả lời

6

Vấn đề của bạn là đầu vào có thể bị trình giả lập thiết bị đầu cuối ăn.

Ví dụ: Alt+<Whatever> thường được dành riêng cho phím tắt menu (ví dụ: Alt+F mở menu File). Các ký tự trùng khớp thường bị hất sáng khi bạn giữ Alt (F được nhấn mạnh trong File).

Ctrl+Sis reserved đối với Stops all output on screen (XOFF) (một lần nữa trình mô phỏng thiết bị đầu cuối của bạn thực hiện điều đó).

Để sử dụng Alt+<...> làm lối tắt trong ứng dụng dòng lệnh của bạn. Theo như tôi đang quan tâm giữ Alt không ảnh hưởng đến nhân vật nhận được, nó chỉ đặt cờ mà khó có thể truy cập trong giao diện điều khiển. Ngay cả trong ứng dụng GUI (trong Windows) nó khá phức tạp và bạn phải sử dụng chức năng như GetAsyncState() để kiểm tra xem alt đã được nhấn hay chưa.

+3

Lưu ý rằng bạn có thể tắt XON/XOFF trong một thiết bị đầu cuối với 'stty -ixon'. – hlovdal

Các vấn đề liên quan