Wann ; hinter for Schleife?!



  • Heyo,

    folgendes Beispiel verwirrt mich etwas...:

    //13.13 char array 2
    
    #include <stdio.h>
    #include <stdlib.h>
    
    char hello1[] = { "Hallo Welt" };
    char output[] = { "Ich bin lesbar \0 Ich nicht mehr" };
    char deznu[]  = { "Mich siehst du 0 Mich und die Null auch" };
    
    int main(void) {
       int i;
       printf("%c", output[0]);      /* I */
       printf("%c'", hello1[9]);     /* t */
       printf("%c ", deznu[5]);      /* s */
       printf("%c", hello1[7]);      /* Gibt das Zeichen 'e' aus */
       printf("%c", output[12]);     /* a */
       printf("%c", deznu[5]);       /* s */
       deznu[1] = 'y';               /* aus 'i' wird 'y' */
       printf("%c\n", deznu[1]);     /* y */
    
        //Größe des Strings berechnen
       for (i=0; hello1[i] != '\0'; i++)
       printf ("Länge von '%s' = %d Zeichen\n", hello1, i);
    
       printf("\n");
    
       for(i=0; hello1[i] != '\0'; i++);
       printf("Länge von '%s' = %d Zeichen\n", hello1, i);
    
        getchar();
        return 0;
    }
    

    Wieso muss man hinter das ; hinter die for-Schleife machen, damit man einfach das richtige Ergebnis angezeigt bekommt?

    Wenn man das ; nicht setzt, zählt er das ganze einfach hintereinander auf... kommt aber nicht beim letzten Zeichen an...

    Mich verwirrt das iwie... wie kommt man überhaupt auf die Idee mit dem ; ?

    Greez

    Haimi



  • hinter for muß nie eins.
    außer, man will

    //mit dummy-funktion
    for(i=0; hello1[i] != '\0'; i++)
       tunix();
    printf("Länge von '%s' = %d Zeichen\n", hello1, i);
    

    oder

    //mit leerem block
    for(i=0; hello1[i] != '\0'; i++)
    {
    }
    printf("Länge von '%s' = %d Zeichen\n", hello1, i);
    

    oder

    //mit leerer anweisung
    for(i=0; hello1[i] != '\0'; i++)
      ;
    printf("Länge von '%s' = %d Zeichen\n", hello1, i);
    

    oder

    //mit philosophie
    for(i=0; hello1[i] != '\0'; i++)
      42;
    printf("Länge von '%s' = %d Zeichen\n", hello1, i);
    

    verschleiern.



  • ahhh verstehe...

    das heißt dann, dass nichts ausgeführt werden soll... also das es keinen anweisungsblock gibt..

    vielen dank 🙂 hat mir zum verständnis sehr geholfen...!


Log in to reply