wie funktioniert fscanf genau?
-
Hi auch
Kann mir bitte jemand erklären wie fscanf in C genau funktioiert wenn ich beispielsweise folgendeTextdatei einlesen möchte:
22.12.7882
12.23.4534
23.09.1993
23.12.2000Es soll ein Programm realisiert werden welches aus einer Eingabe-Textdatei (s.o.) eine Ausgabetextdatei erzeugt wo alle "." ersetzt werden durch ":" und dabei fscanf benutzt wird.
Mein Ansatz bisher:
#include <stdio.h> #include <stdlib.h> #include <string.h> int copyDates(FILE *fin, FILE *fout) { int i=0; char *c; c=(char*)malloc(11*sizeof(char)); while(fscanf(fin,"%s",c) != EOF) { if(c[i]=='.') { fprintf(fout,"%c",':'); } else { fprintf(fout,"%s",c); i++; } } free(c); return i; } int main(void) { FILE *filein=NULL,*fileout=NULL; int noDates; char outputName[]="ausgabe.txt"; filein = fopen("eingabe.txt","r"); fileout = fopen("ausgabe.txt", "w"); noDates = copyDates(filein,fileout); printf("Datei %s enthaelt %d Daten\n",outputName,noDates); fclose(filein); fclose(fileout); system("PAUSE"); return 0; }
Genau an der fscanf-Zeile schmiert die Anwendung ohne Fehlermeldung ab.
Ich hoffe ihr könnt mir weiterhelfen
-
Wieso ohne Fehlermeldung? Startest du das Programm vielleicht ohne Debugger?
EDIT: Übrigens musst du auch die Rückgabe von fopen checken. Wenn da NULL zurückkommt, hat das mit dem Öffnen nicht so ganz geklappt und ein Verwenden des Handles ist eher nicht ratsam.
-
while(fscanf(fin,"%s",c) != EOF)
Was möchtest du damit bezwecken?
-
@ _matze:
Hab die NULL Abfrage eingebaut, kein Fehler.
Beim Kompilieren und Erstellen der EXE gibt es ebenso keine Fehlermeldung.
Der Dev C++ Compiler sagt bei der Debugging Meldung bloss "pre-prompted (gdb)"Beim Ausführen der EXE wird diese direkt wieder beendet.
Mitsystem:"Pause"
hab ich dann die Stelle mit fscanf als Fehler herausgefunden.
zu fscanf (was ich bisher nicht herausgefunden hab):
liest die Funktion den gesamten Text auf einmal ein oder String für String oder wie scanf nur bis zum ersten Leerzeichen / Zeilenumbruch?@ Kóyaánasqatsi:
Die Eingabetextdatei bis zum EOF einlesen und im Array c ablegen
-
Zieh dir mal die Doku 'rein:
http://msdn.microsoft.com/en-us/library/cb5kac8b(VS.71).aspx
-
Hi!
Stefanseiner schrieb:
Genau an der fscanf-Zeile schmiert die Anwendung ohne Fehlermeldung ab.
Vermutlich ist fin NULL oder ungültig. Du kommst auch wunderbar ohne malloc aus:
int a, b, c; ... while( 0 == feof(fin)) { fscanf(fin, "%d.%d.%d\n", &a, &b, &c); fprintf(fout, "%d:%d:%d\n", a, b, c); } fcloseall(); ...
Gruß,
c.