Problem mit fgetc oder fputc
-
Hollo zusammen,
Ich bin gerade dabei mir ein Programm zu schreiben, dass mir einen Text aus input.txt einliest, und die Kommas gegen Freizeichenaustauscht und das ganze dann wieder in eine Datei output.txt schreibt.
Ich muß irgendwo nen Fehler in der Syntax haben, die output.txt wird zwar erzeugt, aber es steht nichts drinn.
Vielen Dank für eure Hilfe!#include<stdio.h> main() { int a=10; FILE *fp_in, *fp_out; fp_in= fopen("input.txt", "r"); fp_out= fopen("output.txt", "w"); do { a=fgetc(fp_in); printf("%d",a); if(a==EOF){return 0;} if(a==44) {a=32;} fputc(a,fp_out); } while(1); fclose(fp_in); fclose(fp_out); return 0; }
-
a muss nicht initialisiert werden.
du willst einen while(!feof(fp_in) && !ferror(fp_in) && !ferror(fp_out)) loop.
statt if(a==EOF){return 0;} willst du if (a == EOF) break;
statt if(a==44){a=32;} willst du if (a == ',') a = ' '; (beides ist equivalent, letzteres ist imho verstaendlicher)
-
OK, Danke erst mal für die schnelle Antwort,
ich hab es jetzt mal so abgeändert:#include<stdio.h> main() { int a=10, b; FILE *fp_in; FILE *fp_out; fp_in= fopen("input.txt", "r"); fp_out= fopen("output.txt", "w"); while(!feof(fp_in) && !ferror(fp_in) && !ferror(fp_out)) { a=fgetc(fp_in); printf("1"); if (a == EOF) break; if(a==',') {a=' ';} fputc(a,fp_out); } fclose(fp_in); fclose(fp_out); return 0; }
Leider funzt es immer noch nicht, statt dessen kommt jetzt noch die Windows Warnung:"das Programm mußte beändet werden Fehlerbericht an Microsoft senden?"
output.txt wird noch erstellt ist aber nichts rein geschrieben.
Das printf("1") wird übriegens auch nicht ausgeführt, er muß also schon vorher abka.....
-
liegt wohl daran, dass deine main keinen rueckgabetypen hat, du aber trotzdem return 0; willst...
compilername und version bitte.#include <stdio.h> int main(void) { int a; FILE *fp_in, *fp_out; fp_in = fopen("input.txt", "r"); fp_out = fopen("output.txt", "w"); while(!feof(fp_in) && !ferror(fp_in) && !ferror(fp_out)) { a = fgetc(fp_in); if (a == EOF) break; if (a == ',') a = ' '; fputc(a, fp_out); } fclose(fp_in); fclose(fp_out); return 0; }
-
liegt wohl daran, dass deine main keinen rueckgabetypen hat, du aber trotzdem return 0; willst...
compilername und version bitte.Borland C++ Compiler 5.5
Hatte mit dem return 0 aber noch nie Probleme, das hab ich bis jetzt an jedem Programm drann gehabt.
-
Problembericht kommt meist bei einer Endlosschleife. Nach meiner Erfahrung kannst du mit break in einer if-Abfrage keine while-Schleife verlassen. Mein Vorschlag: Nimm eine Variable, um die while Schleife zu beenden.
while (Variable nicht gesetzt) { if (blabla) { Variable setzen } }
-
c.rackwitz schrieb:
liegt wohl daran, dass deine main keinen rueckgabetypen hat, du aber trotzdem return 0; willst...
sehr unwahrscheinlich...
Flotti schrieb:
Nach meiner Erfahrung kannst du mit break in einer if-Abfrage keine while-Schleife verlassen.
doch, das geht. daran liegts bestimmt auch nicht.
techniker46: mach single steps im debugger, dann siehste was schief geht
-
Flotti schrieb:
Nach meiner Erfahrung kannst du mit break in einer if-Abfrage keine while-Schleife verlassen.
Nach meiner Erfahrung kannst du mit break in einer if-Abfrage eine while-Schleife verlassen:
#include <stdio.h> int main() { int i=0; while (1) { ++i; if (10 == i) break; } printf("Schleife verlassen mit Wert i=%d\n",i); return 0; }
MfG
GPC
-
net schrieb:
c.rackwitz schrieb:
liegt wohl daran, dass deine main keinen rueckgabetypen hat, du aber trotzdem return 0; willst...
sehr unwahrscheinlich...
v.a. da in C eine Methode ohne expliziten return-type eh int als default return-type spendiert bekommt.
-
output.txt wird erzeugt durch das fopen().
Die while-Schleife wird wohl gar nicht begonnen, weil eine der Bedingungen
while(!feof(fp_in) && !ferror(fp_in) && !ferror(fp_out))
bereits zuschlägt.
Sowohl feof() als ferror() habe ich bisher nur im tatsächlichen Fehlerfall aufgerufen, und zwar nachgeschaltet wie z.B.
if ((a = fgetc(fp_in)) == EOF) { if (feof(fp_in)) ... else if (ferror(fp_in)) ... break; }
bzw.
if (fputc(a, fp_out) == EOF) { if (ferror(fp_out)) ... break; }