fgetc und putchar



  • Warum erhalte ich bei Folgendem die richtige Ausgabe,

    // Datei öffnen Übung
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(void) {
        int c;
        FILE *datei;
        datei = fopen("/Users/***/Desktop/***/***/test.txt", "r");
    
        if (datei != NULL) {
            while ((c=fgetc(datei)) != EOF) {
                putchar(c);
            }
        } else {
            printf("Die Datei wurde nicht gefunden");
        }
    
    }
    

    bei dem Folgenden wiederum nicht?

    // Datei öffnen Übung
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(void) {
        int c;
        FILE *datei;
        datei = fopen("/Users/***/Desktop/***/***/test.txt", "r");
        c = fgetc(datei);
        if (datei != NULL) {
            while (c != EOF) {
                putchar(c);
            }
        } else {
            printf("Die Datei wurde nicht gefunden");
        }
    
    }
    

    Bei letzterem wird mir immer nur der erste Buchstabe ausgegeben.



  • Wie veraendert sich den c im Verlauf der Schleife?



  • Furble Wurble schrieb:

    Wie veraendert sich den c im Verlauf der Schleife?

    Ich weiß es nicht. Ich hätte jetzt darauf getippt, dass irgendwo ein c++ oder ähnliches vorkommt, damit zum nächsten Buchstaben gesprungen wird. Dies ist ja aber bei beidem nicht der Fall.



  • CrispyTurtleAlligator schrieb:

    Furble Wurble schrieb:

    Wie veraendert sich den c im Verlauf der Schleife?

    Ich weiß es nicht. Ich hätte jetzt darauf getippt, dass irgendwo ein c++ oder ähnliches vorkommt, damit zum nächsten Buchstaben gesprungen wird. Dies ist ja aber bei beidem nicht der Fall.

    Lass mich meine Frage neuformulieren:
    Gibt es in dem zweiten Beispiel irgendeine Chance, dass sich c ändert?
    Was ist in dem ersten Beispiel anders?



  • Furble Wurble schrieb:

    CrispyTurtleAlligator schrieb:

    Furble Wurble schrieb:

    Wie veraendert sich den c im Verlauf der Schleife?

    Ich weiß es nicht. Ich hätte jetzt darauf getippt, dass irgendwo ein c++ oder ähnliches vorkommt, damit zum nächsten Buchstaben gesprungen wird. Dies ist ja aber bei beidem nicht der Fall.

    Lass mich meine Frage neuformulieren:
    Gibt es in dem zweiten Beispiel irgendeine Chance, dass sich c ändert?
    Was ist in dem ersten Beispiel anders?

    Nein. Das würde sich aber mit einem c = fgetc(datei); innerhalb des Schleifenkörpers ändern lassen, richtig? Trotzdem ist mir nicht ersichtlich, warum dadurch oder durch while ((c = fgetc(datei)) != EOF) c verändert wird.



  • Na, da steht doch c = fgetc(datei), oder nicht?



  • c = fgetc(datei)
    

    das verändert c.
    Bei while( xyz ) wird vor jedem Schleifendurchlauf xyz ausgewertet. In Deinem Fall wird zugewiesen und dann auf Gleichheit geprueft...

    Einfacheres Beispiel:

    #include <stdio.h>
    
    int main(void) {
      int i=0;
      while(i++!=10) // hier graue Zellen anstrengen! i aendert sich!
        printf("%i\n", i);
     }
    


  • Furble Wurble schrieb:

    c = fgetc(datei)
    

    das verändert c.
    Bei while( xyz ) wird vor jedem Schleifendurchlauf xyz ausgewertet. In Deinem Fall wird zugewiesen und dann auf Gleichheit geprueft...

    Einfacheres Beispiel:

    #include <stdio.h>
    
    int main(void) {
      int i=0;
      while(i++!=10) // hier graue Zellen anstrengen! i aendert sich!
        printf("%i\n", i);
     }
    

    Dass i durch i++ erhöht wird, ist mir vollkommen klar. Ich wusste nur nicht, dass durch c = fgetc(datei) dann auch der nächste Buchstabe genommen wird, nicht derselbe wieder.



  • CrispyTurtleAlligator schrieb:

    Furble Wurble schrieb:

    c = fgetc(datei)
    

    das verändert c.
    Bei while( xyz ) wird vor jedem Schleifendurchlauf xyz ausgewertet. In Deinem Fall wird zugewiesen und dann auf Gleichheit geprueft...

    Einfacheres Beispiel:

    #include <stdio.h>
    
    int main(void) {
      int i=0;
      while(i++!=10) // hier graue Zellen anstrengen! i aendert sich!
        printf("%i\n", i);
     }
    

    Dass i durch i++ erhöht wird, ist mir vollkommen klar. Ich wusste nur nicht, dass durch c = fgetc(datei) dann auch der nächste Buchstabe genommen wird, nicht derselbe wieder.

    👍


Anmelden zum Antworten