for schrittweite abhängig machen?



  • Hi, weiß jemand ob es geht und wenn ja wie?

    Die schrittweite einer for-schleife soll sich danach richten
    ob eine variable 0 oder 1 ist.

    etwa so:

    wenn var=0 dann ptr1 = ptr1 -> next

    und

    wenn var=1 dann ptr1 = ptr1

    Brauch eine schnlle antwort wenns geht.
    Bin gerade voll im stress. 😞



  • Du kannst in der Schleife, wenn var 1 ist einfach deine Laufvariable wieder dekremieren, wenn es das ist, was du meinst...



  • Aber ich bin ja schon durch die schrittweite in der erketteten liste ein element weiter gegangen.

    wie komme ich den dann wieder mit dem zeiger auf das element davor?

    klappt das mit ptr1--; ?



  • Ein Beispiel:

    int ptr;  // Laufvariable
    int var;
    (...)
    for(ptr=0;ptr<?;ptr++)
    {
     (...)
     if(var == 1)
      ptr--;
    }
    

    So ungefähr... Damit setzt du ptr wieder auf den Wert, den es vor Durchgang der Schleife hatte. Poste doch einfach mal 'n bisschen Code, wenn du was anderes meinst...



  • Wenn's um eine verkettete Liste geht:

    /* Verständliche Version */
    for (...; ...; ) {
      ...
      if (var == 0) ptr = ptr->next;
      //else          ptr = ptr;
      // sinnlos, ptr sich selbst zuzuweisen, deshalb machen wir das auch nicht
    }
    
    /* Kurze Version */
    for (...; ...; var == 0 ? ptr = ptr->next : 0) {
      ...
    }
    


  • for(foo; bar; ptr1 = (var1 == 1) ? ptr1 : ptr1->next)...

    trinaeroperator ?: funktioniert so:

    if (bedingung)
    var = konsequenz;
    else
    var = alternative;

    wird zu
    var = bedingung ? konsequenz : alternative;

    warum laesst du das inkrement im for-kopf nicht leer und setzt es stattdessen ans ende des schleifenkoerpers?

    for(foo; bar; )
    {
        ...
        if (var1 == 0)
            ptr1 = ptr1->next;
    }
    

Anmelden zum Antworten