HILFE !!!!!!!



  • hi,

    ich bin grad dabei ein kleines programm zu schreiben und hätte da mal 2 kleine fragen:

    1.) das programm soll in einer endlosschleife so lange laufen, bis eine bestimmte taste gedrückt wird. Ich bräuchte also eine funktion, mit der ich feststellen kann, ob eine taste gedrückt wurde und wenn ja, welche.

    funktionen wie getchar(), scanf() etc. halten den programmablauf ja so lange an, bis schließlich eine taste gedrückt wird. sollte aber keine taste gedrückt sein, soll das programm einfach weiterlaufen

    2.) ich bräuchte eine funktion zum löschen des bildschirminhalts.

    vielen dank für eure hilfe im vorraus!



  • kann mir irgendwer helfen ??????????



  • 1. Hier sitzt man nicht den ganzen Tag vor dem Bildschirm um auf deine Frage zu warten. Hab etwas Geduld mit der Antwort.

    2. Deine Frage kommt nicht zum ersten Mal hier vor. Beide kamen sogar derart häufig vor, dass sie in die FAQ gepackt wurden:

    kbhit() - ist Taste gedrückt?
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-39320.html

    Improved Console - hier kannst du entweder nur ClearScreen() kopieren bzw. auch die ganze Klasse verwenden.
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-86429.html

    MfG SideWinder



  • danke erstmal, hilft mir aber leider auch nicht weiter

    1.) kbhit() verwendet conio.h, aber conio.h steht mir unter linux leider nicht zur verfügung.

    2.) hab mir das jetzt zwar nich bis ins detail angeschaut, sieht aber so aus als ob auch das nur unter windows laufen würde

    weiß irgendjemand eine lösung für linux (mit dem gcc compiler)?



  • guck dir (n)curses an



  • Sag doch gleich, dass du Linux benützt - nein auch die Improved Console funktioniert nur unter Windows.

    Für Linux ist wie gesagt ncurses deine Wahl. Wieso postest du nicht gleich im Linux-Forum, dann hättest du die dortige Linux-FAQ durchsuchen können und wärst auf folgenden Thread gestoßen: "Pendant zu getch() und kbhit() im unix bereich???"

    MfG SideWinder



  • int kbhit(void) {
            struct termios term, oterm;
            int fd = 0;
            int c = 0;
            tcgetattr(fd, &oterm);
            memcpy(&term, &oterm, sizeof(term));
            term.c_lflag = term.c_lflag & (!ICANON);
            term.c_cc[VMIN] = 0;
            term.c_cc[VTIME] = 1;
            tcsetattr(fd, TCSANOW, &term);
            c = getchar();
            tcsetattr(fd, TCSANOW, &oterm);
            if (c != -1)
            ungetc(c, stdin);
            return ((c != -1) ? 1 : 0);
    }
    

    sollte mir entweder 1 oder 0 zurückgeben, je nachdem ob irgendeine
    taste gedrückt wird oder nicht; gibt mir aber seltsamerweise immer 1 zurück.

    return ((c != -1) ? 1 : 0);
    

    -----------------

    int getch() {
        static int ch = -1, fd = 0;
        struct termios neu, alt;
        fd = fileno(stdin);
        tcgetattr(fd, &alt);
        neu = alt;
        neu.c_lflag &= ~(ICANON|ECHO);
        tcsetattr(fd, TCSANOW, &neu);
        ch = getchar();
        tcsetattr(fd, TCSANOW, &alt);
        return ch;
    }
    

    funktioniert soweit, aber wartet leider nach jedem tastendruck.



  • sorry, war mein fehler
    funktioniert jetzt aber auf jeden fall mit folgendem code:

    if (kbhit() == 1) {
    	zeichen = getch();
    }
    

    danke für eure hilfe!


Log in to reply