Modulo Verständnis



  • Hallo. Warum spuckt mir:

    #include <stdio.h>
    
    int main(void)
    {
        int wert;
        for( wert = 1; wert <= 10; wert = wert + 1 )
        {
            printf( "Ich bin bei '%d'\n", wert );
    
            if((wert % 2) == 0)
                continue;
    
            printf( "  Dieser Wert ist durch zwei teilbar.\n" );
        }
    
        return 0;
    }
    

    etwas anderes aus als:

    #include <stdio.h>
    
    int main(void)
    {
        int wert;
        for( wert = 1; wert <= 10; wert = wert + 1 )
        {
            printf( "Ich bin bei '%d'\n", wert );
    
            if(wert % 2)
                continue;
    
            printf( "  Dieser Wert ist durch zwei teilbar.\n" );
        }
    
        return 0;
    }
    

    ? Letzteres zeigt mir die richtigen Zahlen an, welche durch zwei restlos teilbar sind. Ersteres jedoch nicht. Warum ist das so?

    Auch: Wenn ich das continue entferne aber ansonsten das == 0 anfüge (wohlgemerkt in einer vollständigen IF-Abfrage), dann stimmt die Ausgabe wieder. Ich bin verwirrt. Und übrigens ein Neuling. 😉


  • Mod

    if((wert % 2) == 0)
    

    Übersetzung: Wenn der Divisionsrest 0 ist...

    if(wert % 2)
    

    Übersetzung: Wenn der Divisionsrest nicht 0 ist...

    Was der Divisionsrest mit der Teilbarkeit einer Zahl zu tun hast, darfst du dir selber überlegen.



  • if(wert % 2)
    

    und

    if(wert % 2 != 0)
    

    sind sinngemäß äquivalent, dann siehst du auch direkt, dass

    if(wert % 2 == 0)
    

    das gegenteil von

    if(wert % 2 != 0)
    

    ist



  • Warum zeigt dann

    #include <stdio.h>
    
    int main(void)
    {
      int wert;
      for( wert = 1; wert <= 10; wert = wert + 1 )
      {
        printf( "Ich bin bei '%d'\n", wert );
    
        if( (wert % 2) == 0 ) 
        {
          printf( "  Dieser Wert ist durch zwei teilbar.\n" );
        }   
      }
    
      return 0;
    }
    

    die richtigen Lösungen an? Schließlich steht ja hier auch == 0. Ich kann da keinen Unterschied zum obigen erkennen. Tut mir leid, falls die Lösung so offensichtlich ist. 🙄

    Wenn der Divisionsrest = 0 ist, ist die Zahl durch 2 teilbar. Also müsste doch dann das Codebeispiel 1 im ersten Beitrag die richtigen Ergebnisse ausspucken, odeR?



  • Was macht denn continue; ?



  • Die Schleife bis zum Ende durchführen, oder?



  • CrispyTurtleAlligator schrieb:

    Die Schleife bis zum Ende durchführen, oder?

    Nein, continue; hat eine gänzlich andere Auswirkung.

    Was genau passiert steht in Deinem C Buch oder z.B. hier: http://en.cppreference.com/w/cpp/language/continue. (ist zwar für C++, aber solange Du nicht das Beispiel kompilieren willst ist das unerheblich).



  • CrispyTurtleAlligator schrieb:

    Die Schleife bis zum Ende durchführen, oder?

    Nein, den Rest überspringen.



  • CrispyTurtleAlligator schrieb:

    Die Schleife bis zum Ende durchführen, oder?

    Die Schleife wird ganz normal, ohne continue "bis zum Ende durchgeführt".
    continue hätte dann also gar keinen Effekt.
    Das kanns also schonmal nicht sein.



  • Oh je.. danke euch! 😃


Log in to reply