Wie funktioniert fscanf in C genau?

Stefanseiner

Grünschnabel
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.2000

Es 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:

Code:
#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
 
Hi.

Ich kann das von dir beschriebene Problem nicht nachvollziehen. Für die Eingabedatei die du angegeben hast läuft das Programm einwandfrei durch.

Allerdings hast du nicht geprüft ob die Dateien überhaupt geöffnet werden konnten.

Und es würde sich anbieten, wenn du schon mit fscanf arbeitest, gleich das Format der Eingabe zu nutzen und fscanf die Arbeit machen zu lassen, anstatt danach noch selber den String zu verarbeiten.
C:
int v1, v2, v3;

while (fscanf(fin, "%2d.%2d.%4d", &v1, &v2, &v3) == 3) {
  ...
}

Gruß
 
Zurück