for-Schleifen



  • hey c community,
    gibt es for-Schleifen mit der Eigenschaft, dass beispielsweise die Schleife so lang läuft, ohne dass ein bestimmtes Element nicht berücksichtigt wird.
    ich meine zb:

    for(i = 0, i=! k, i++){
    ...
    }
    


  • du meinst wohl, dass ein element nicht berücksichtigt werden soll

    for(i=0; i<n, i++)
    {
    if(i==123) continue;
    ...
    }



  • ich meine, wenn ich vorher ein Element belege, dass dieses in der for-Schleife nicht berücksichtigt wird.

    int j = 5;
    for(i = 0; i =! j, i++){
    ...
    }
    

    oder würde die for-Schleife dann unendlich oft durchgelaufen?
    würde es denn funktionieren, wenn ich vorher i begrenze??



  • Die Antwort hast du doch eigentlich schon bekommen. Was JaJaJa geschrieben hat, löst ganz genau dein Problem. In der Schleife führst du den eigentlichen Schleifenrumpf nicht aus, wenn i==123. Im Schleifenkopf kannst du sowas nicht unterbringen, du kannst da lediglich eine Abbruchbedingung festlegen, aber nicht einzelne Elemente exkludieren.



  • Die Antwort von JaJaJa war schon korrekt, wenn du die Bedingung in den Schleifenkopf schreibst wird die Schleife beendet.

    int k = 5;
    for (int i = 0; i < 50; ++i)
    {
      if (i == k)
        continue;
    }
    

    Zu spät 😞



  • Du scheinst etwas wirr...

    Eine for-Schleife ähnelt im Grunde einer while Schleife, mit "Kopf&Fuß", sprich Möglichkeit der Vorbelegung und z.B. Inkrementierung vor Ablauf eines Schleifendurchgangs...

    int x = 0;
    while ( x < 10 )
    {
       printf ("\n%d", x);
       x++;
    }
    

    und

    int x;
    for ( x = 0 ; x < 10 ; x++ )
    {
       printf ("\n%d", x);
    }
    

    sollten sich im Endergebnis nicht viel nehmen.

    Du kannst (unter anderem) in Schleifen sogenannte "Sprünge" absolvieren...
    Die dazugehörigen gebräuchlichen Anweisungen lauten continue und break...

    Logischerweise beendet break die Schleife an Ort und Stelle und ignoriert den Rest des Quellcodes innerhalb der Schleife, continue ignoriert ebenfalls den Rest des Schleifeninhaltes aber springt direkt zurück zum Schleifenbeginn. In einer for-Schleife wird in diesem Falle die iterative Anweisung ausgeführt ( "for ( ; ; x++)" ), in einer while-Schleife logischerweise nicht.

    Was Du nun genau möchtest, wird aus den Satzmutanten, die sich aus den Wortfetzen in Deinen Posts bilden nicht ganz klar...

    Wenn Du z.B. 9 Zahlen von 0-5 und 7-9 (außer 6) ausgeben möchtest ->

    int x;
    for ( x = 0 ; x < 10 ; x++ )
    {
       if (x == 6)
       {
          continue;
       }
       printf ("\n%d", x);
    }
    

    Du möchtest wahrscheinlich die If-Abfrage in der Schleife umgehen. Spontan fällt mir nur was experimentelles ein:

    int x;
    for ( x = 0 ; x < 10 ; (x == 6 ? x++ : printf ("\n%d", x++)) );
    

    x mit 0 vorbelegen - Solange x kleiner 10 ist, folgendes ausführen:
    wenn x == 6, nur x hochzählen, Ansonsten x ausgeben und danach hochzählen...





  • danke euch allen, das 'continue' war mir neu, und danke für die beispiele!



  • PrettyP schrieb:

    http://ideone.com/rgYam

    Immer noch zu lesbar, durchgefallen! 😃 😉



  • Unlesbarkeit war nicht mein beabsichtigtes Ziel - das kommt bei mir von ganz allein 😉

    Master of Unreadability ist immer noch Wutz ^^

    Ich dachte, der Threadersteller möchte eine for-Schleife, die ohne weitere if-Anweisung im Schleifeninneren "überspringt"... Ne andre Möglichkeit ist mir spontan mal nicht eingefallen ^^


  • Mod

    PrettyP schrieb:

    Ich dachte, der Threadersteller möchte eine for-Schleife, die ohne weitere if-Anweisung im Schleifeninneren "überspringt"... Ne andre Möglichkeit ist mir spontan mal nicht eingefallen ^^

    Bloß weil du sie versteckt hast, ist sie trotzdem noch da. Daher bietet es sich an, sie so zu schreiben, dass man es auch auf den ersten Blick lesen kann.



  • PrettyP schrieb:

    Ich dachte, der Threadersteller möchte eine for-Schleife, die ohne weitere if-Anweisung im Schleifeninneren "überspringt"... Ne andre Möglichkeit ist mir spontan mal nicht eingefallen ^^

    "überspringen"!

    int x;
    for ( x = 0 ; x < 10 ; x++,x==6?x++:0 )
    {
       printf ("\n%d", x);
    }
    


  • PrettyP schrieb:

    Master of Unreadability ist immer noch Wutz ^^

    😃



  • SeppJ schrieb:

    PrettyP schrieb:

    Ich dachte, der Threadersteller möchte eine for-Schleife, die ohne weitere if-Anweisung im Schleifeninneren "überspringt"... Ne andre Möglichkeit ist mir spontan mal nicht eingefallen ^^

    Bloß weil du sie versteckt hast, ist sie trotzdem noch da. Daher bietet es sich an, sie so zu schreiben, dass man es auch auf den ersten Blick lesen kann.

    So weit, so klar.

    JanJanJan schrieb:

    gibt es for-Schleifen mit der Eigenschaft, dass beispielsweise die Schleife so lang läuft, ohne dass ein bestimmtes Element nicht berücksichtigt wird.

    Trotzdem reimte ich mir zusammen (bei dem Thread war etwas Phantasie gefragt...), dass die Aufgabenstellung in etwa so lautete:
    "Programmieren Sie ein for-Schleife, die den drölften Durchlauf auslässt, ohne abzubrechen und verwenden Sie bei der Lösung der Aufgabe kein 'if'!"

    Dann hätte man die Buchstabenfolge 'if' nicht verwendet... 😛


Anmelden zum Antworten