غير حظر getch ()، ncurses
سؤال
أواجه بعض المشاكل في الحصول على NCURSES 'Getches () لمنع. يبدو أن العملية الافتراضية غير حظر (أو هل فاتني بعض التهيئة)؟ أود أن أعمل مثل Getch () في Windows. لقد جربت العديد من الإصدارات من
timeout(3000000);
nocbreak();
cbreak();
noraw();
etc...
(ليس كل ذلك في نفس الوقت). أفضل أن لا (صراحة) استخدام أي WINDOW
, ، اذا كان ممكنا. أ while
حلقة حول Getch ()، والتحقق من قيمة عودة محددة على ما يرام أيضا.
المحلول
مكتبة اللعنات هي صفقة حزمة. لا يمكنك فقط سحب روتين واحد ونأمل في الأفضل دون تهيئة المكتبة بشكل صحيح. إليك رمز يمنع بشكل صحيح getch()
:
#include <curses.h>
int main(void) {
initscr();
timeout(-1);
int c = getch();
endwin();
printf ("%d %c\n", c, c);
return 0;
}
نصائح أخرى
من صفحة رجل (تم اضافة التأكيدات):
ال
timeout
وwtimeout
إجراءات ضبط الروتين أو عدم الحظر قراءة نافذة معينة. إذاdelay
هو سلبي، يتم استخدام حظر القراءة (أي ينتظر إلى أجل غير مسمى للإدخال).
تحتاج إلى الاتصال initscr()
أو newterm()
لتهيئة اللعنات قبل أن تعمل. هذا يفي بالغرض بالنسبة لي:
#include <ncurses.h>
int main() {
WINDOW *w;
char c;
w = initscr();
timeout(3000);
c = getch();
endwin();
printf("received %c (%d)\n", c, (int) c);
}