Bitte Auflärung!



  • Ich habe folgendes Programm, komme aber nicht dahinter, warum er bei dem Durchlauf auf folgende Ergebnisse, sowie "i" und "j" Werte kommt. Das fängt schon in der ersten zeile an, wo das i post dekrementiert wird, jedoch eine Ausgabe von "i" als "1" erfolgt. Kann mir hier jemand evtl helfen?
    Man würde mir wirklich sehr helfen, vielen Dank

    #include<stdio.h>

    void main()
    {
    int i,j,erg;
    i=j=0;
    erg=i++&&j++;
    printf("%d,%d,%d\n",i,j); /* 0,1,0*/

    i=j=0;
    erg=++i&&++j;
    printf("%d,%d,%d\n",erg,i,j); /*1,1,1*/

    i=j=0;
    erg=i++||j++;
    printf("%d,%d,%d\n",erg,i,j); /*0,1,1*/

    i=j=0;
    erg=++i&&j++;
    printf("%d,%d,%d\n",erg,i,j); /*0,1,1*/

    i=j=0;
    erg=++i||j++;
    printf("%d,%d,%d\n",erg,i,j); /*1,1,0*/

    i=j=0;
    erg=i++&&++j;
    printf("%d,%d,%d\n",erg,i,j); /*0,1,0*/

    i=j=0;
    erg=i++||++j;
    printf("%d,%d,%d\n",erg,i,j); /*1,1,1*/
    }



  • sorry, meine natürlich inkrementiert....



  • Der Unterschied zwischen einem Präfix- und Postfix-Inkrement Operator ist, dass die Postfixversion bei der Inkrementierung den vorherigen Wert der Variable zurückliefert; die Präfixversion dagegen sofort den Neuen. Dies gilt auch für die Dekrement-Operatoren. Im Klartext heißt es, dass

    int a = 0;
    a++; // a++ liefert 0 zurück, a wird jedoch um 1 erhöht
    int b = a; // a = b = 1
    

    äquivalent zu

    int a = 0;
    int b = ++a; // a = b = 1
    

    ist.

    Im Übrigen gibt die main-Funktion stets einen int zurück. Auch übergibst du beim ersten printf-Aufruf nur zwei Variablen, obwohl drei Format-Spezifizierer angegeben wurden, womöglich vergessen?



  • Erstmal folgendes:
    <stdio.h> ➡ <cstdio>
    void main() ➡ int main()

    Nun zu deinem Code. Die logischen Operatoren arbeiten nach dem Prinzip, dass immer nur soviel ausgewertet wird, wie notwendig ist. Beim logischen UND bedeutet das, dass der zweite Operand nicht ausgewertet wird, falls der erste false ergibt. Beim logischen ODER bedeutet das, dass der zweite Operand nicht ausgewertet wird, falls der erste true ergibt. Forme mit diesem Wissen mal alle Beispiele um, so dass du siehst, was der Compiler daraus macht. Dann sollte auch deutlich werden, wie die Ausgaben zustande kommen.

    Bsp.:

    i=j=0;
         erg=i++&&j++;
         // ->
         erg=i&&j; // i=0, j=0 -> erg=0
         i+=1; // i++ -> i=1
         // j++ wird nicht ausgewertet, da der erste Operand beim UND Operator false ist
         // -> erg=0, i=1, j=0
    


  • Hallo shlo und groovemaster,

    vielen dank für die antwort. ihr habt mir und anderen sehr geholfen

    Gruß


Log in to reply