abruch mit return



  • Wie kann ich das laufende programm mit einer taste abrechen?mit getch()funktioniert es irgendwie nicht.kann mir jemand helfen?

    #include<stdio.h>
    #include<curses.h>
    int i,c;
    void dummy(int n);
    int main(){
    initscr();
    curs_set(0);
    refresh();
    for(i=0;i<5000;i++){
    dummy(i);
    refresh();
    }
    endwin();
    }
    void dummy(int i){
    int *wert;
    for(c=0;c<12;c++){
    wert[0]=rand()%70;
    wert[1]=rand()%70;
    wert[2]=rand()%70;
    wert[3]=rand()%70;
    wert[4]=rand()%70;
    wert[5]=rand()%70;
    wert[6]=rand()%70;
    wert[7]=rand()%70;
    wert[8]=rand()%70;
    for(i=0;i<9;i++){
    start_color();
    mvprintw(wert[i],wert[c]," ",i);
    init_pair(i,i,i);
    attron(A_BOLD);
    attrset(COLOR_PAIR(i)|A_BOLD);
    refresh();
    }}}
    


  • Wenn du Hilfe brauchst, dann solltest du auch erklären wo genau. Einfach ein bisschen Code hinzuwerfen bringt nichts. Außerdem ist er nicht sehr leserlich formatiert, finde ich. Also überleg dir erstmal was du genau willst und versuch das dann zu formulieren und verständlich rüber zu bringen.



  • Das Programm gibt farbige Rechtecke an beliebiger stelle aus...Die Funktion wird in einer Schleife ausgegeben.Wenn ich nun will das die Schleife mit einem Tastendruck unterbrochen werden soll,wie stelle ich das an?Hab es mit getch versucht wie ihr seht...es Funktioniert aber so nicht die Schleife wird nicht unterbrochen...Kann es sein das ich die Tastenabfrage in der Funktion machen muß?

    #include<stdio.h>
    #include<curses.h>
    char key;
    int i,c;
    void dummy(int n);
    int main(){
    
    initscr();
    curs_set(0);
    key=getch();//Tasteneingabe
    refresh();
    
    while(key!='q'){//Tastenabfrage
    for(i=0;i<1000;i++){//Funktion wird mit schleife gestartet...
    dummy(i);
    refresh();
    }}
    endwin();
    }
    void dummy(int i){//Funktion
    int *wert;
    for(c=0;c<12;c++){
    wert[0]=rand()%70;//Farbwert wird mit zufalls Allgo bestimmt...
    wert[1]=rand()%70;
    wert[2]=rand()%70;
    wert[3]=rand()%70;
    wert[4]=rand()%70;
    wert[5]=rand()%70;
    wert[6]=rand()%70;
    wert[7]=rand()%70;
    wert[8]=rand()%70;
    for(i=0;i<9;i++){
    start_color();
    mvprintw(wert[i],wert[c]," ",i);//Positionierung der Kästchen im Terminal wird erstellt....
    init_pair(i,i,i);//farbwert wird initialisiert
    attron(A_BOLD);
    attrset(COLOR_PAIR(i)|A_BOLD);
    refresh();
    }}}
    


  • Ah, das ist schon besser.

    Das getch() ist natürlich fehl am Platze. Da du dort nur vor der Schleife eine Eingabe erwartest. Du musst innerhalb deiner Schleifen abfragen, ob eine Taste gedrückt wurde. Schau dazu mal in die Konsolen-FAQ und such mal nach kbhit(). Möglicherweise brauchst du aber auch ein wenig was anderes. Anhand der curses.h vermute ich mal, dass du unter unix codest, oder?? Es gab auch mal einen Thread, in dem für Linux die Funktion kbhit() nachgebaut wurde. Wie gesagt einfach mal die Suche hier im Forum anschmeißen und die Suchbegriffe eingeben ;).



  • naja hab es schon soweit hinbekommen das ich return drücken genauer gesagt halten mußte um das programm am laufen zu halten beim loslassen von return blieb das programm stehen:-)irgendwie irrsinn...ich werde jetzt versuchen mit *WINDOW ein 2 fenster zu erstellen und das proggi dort laufen lassen und kill es dann mit delwin()mal sehen vielleicht klappts...



  • Wie gesagt, schau dich mal in der Konsolen-FAQ um. Da gibts zumindest eine Erklärung zu der Funktion kbhit(), die abfrägt, ob eine Taste gedrückt wurde. Und genau das ist es, was du suchst. getch() wird immer so lange warten bis du eine Eingabe gemacht hast. kbhit() tut das nicht.



  • Ich Danke Dir...


Anmelden zum Antworten