Problem mit Schleifen



  • Hallo, ich habe daein Problem 🙄

    Ähm also da sind 8 ineinander geschachtelte for-schleifen...

    for(i=0; i<27; i++)
    	{
    		for(j=0; j<27; j++)
    		{
    .
    .
    .usw
    

    und da es ziemlich lange dauert bis alle durchlaufen sind, will ich sie durch eine Tastatureingabe während das Programm läuft beenden lassen.

    Sowas wie:

    if (getchar == '\n')
    

    innerhalb der Schleifen funktioniert aber nicht; da wird erst mit der Bearbeitung der Schleifen weitergemacht, wenn ich eben die Taste gedrückt habe.

    Naja schwierig auszudrücken, aber was ich will, ist dass die Schlaufen "hinter" dem Tastaturbefehl (solange nichts gedrückt wurde) weiterlaufen und erst wenn man dann eine Taste betätigt, die Schleife angehalten wird.
    Könnte sein, dass ich die Tutorials nicht ausführlich gelesen hab, bin aber auf nichts gestossen, was mir helfen könnte.
    Bis auf den stdin-Kanal irgendwie zu benutzen vielleicht

    mfg
    pyrogen 😕



  • pyrogen schrieb:

    Ähm also da sind 8 ineinander geschachtelte for-schleifen...

    Sicher das das nötig ist??

    und da es ziemlich lange dauert bis alle durchlaufen sind, will ich sie durch eine Tastatureingabe während das Programm läuft beenden lassen.

    Kling als wenn du Threads (System abhängig) suchst...

    innerhalb der Schleifen funktioniert aber nicht; da wird erst mit der Bearbeitung der Schleifen weitergemacht, wenn ich eben die Taste gedrückt habe.

    Mit Standard C leider nicht möglich. Welches OS verwendest du? Denn dein OS wird dir sicher eine Funktion ala 'isKeyPressed' anbieten um festzustellen ob eine Taste gedrückt wurde.



  • Du kannst das mit if(kbhit()) return; machen. Dazu musst du den Header "conio.h" inkludieren. AFAIK ist das aber kein standard.



  • DennisB schrieb:

    AFAIK ist das aber kein standard.

    Eben! Es funktioniert ja nichtmal überall. Du kannst also nicht sagen - dass das die Lösung ist, denn wer garantiert dir, dass es beim OP so funktioniert?



  • Wenn es sich um ein M$ Betriebssytem (Windows oder DOS) handelt, dann schau mal in die Konsolen-FAQ. Da gibts einen Lösungsansatz. Unter anderem auch die Möglichkeit mit kbhit().

    Allerdings wird diese Funktion, wie Shade schon schrieb, nicht von jedem Compiler unterstützt. Um so neuer der Compiler ist, um so weniger wird sie unterstützt. Ich würde auch nach einer API-Lösung schauen.



  • wie wäre es mit
    int weiter = 1;
    for(i=0; i<27 && weiter; i++)
    {
    for(j=0; j<27 && weiter; j++)
    {
    .
    . weiter = (kbhit()?0:1);
    .usw

    besser wäre jedoch eine rekursive Lösung an Stelle der For-Schleifen



  • @Anders:

    kbhit ist kein Standard!

    Mir gefaellt die Idee mit dem Flag sowieso nicht. Besser waere es dann ein return einzufuegen -> dazu muss man die Schleifen allerdings in eine extra Funktion geben, aber bei 8 Schleifen kann sowieso etwas nicht stimmen.


Anmelden zum Antworten