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 durchwhile ((c = fgetc(datei)) != EOF)
c verändert wird.
-
Na, da steht doch c = fgetc(datei), oder nicht?
-
c = fgetc(datei)
das verändert c.
Beiwhile( 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.
Beiwhile( 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.
Beiwhile( 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.