سؤال

أواجه بعض المشاكل في الحصول على 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);
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top