Problem mit fprintf u fscanf -> fscanf wir 1mal zuviel gelesen!



  • also wenn ich mit fscanf von einer datei Datensätze einlese, die ich von Hand in einer Datei eingegeben habe läuft alles korrekt ab

    12.12.1212 234
    12.12.1212 sdfs

    while(!feof(fp)) {
                    fscanf (fp,"%d.%d.%d%", &tag, &monat, &jahr); 
                    fflush(stdin);
                    fscanf (fp,"%[^\n]",name);  
                    fflush(stdin);                             
                }
    

    wenn ich aber mit

    fprintf( p,"%02d.%02d.%04d %s\n",tag,monat,jahr,name);
    
      -->  das speichere ich in der datei 12.12.1212 sdfsdf
    

    einen datensatz speichern will läuft das auch noch korrekt ab und der datensatz wird auch in der datei korrekt gespeichert -> Die Datei wird wieder geschlossen und wenn ich wieder die Datei neu öffne und mit der obigen fscanf einleseschleife die Datensätze wieder einlese kommt -> das hier raus

    12.12.1212 234
    12.12.1212 sdfs
    12.12.1212 sdfsdf
    12.12.1212 sdfsdf

    also der letzte Datensatz wird 1mal zuviel eingelesen?? aber ich weiß nicht warum wird viell das Ende Flag falsch gesetzt oder hat das irgendwas mit dem Puffer zu tun? die obige fscanf schleife läuft 1mal zuviel ab??



  • wenn du ein SPACE nach [^\n] einfügst dürfte es gehen:

    fscanf (fp,"%d.%d.%d% %[^\n] ", &tag, &monat, &jahr, name);
    


  • big thx unglaublich es funzt!

    noch eine frage warum funzt das->

    fscanf (fp,"%d.%d.%d%", &tag, &monat, &jahr);
    fscanf (fp,"%[^\n] ",name);
    

    und das so nicht? ->

    fscanf (fp,"%d.%d.%d% %[^\n] ", &tag, &monat, &jahr, name);
    

Anmelden zum Antworten