Problem beim Abspeichern in Datei



  • Woher sollen wir wissen in welcher deiner Quelltextfassungen der Fehler in Zeile 54 angezeigt wird. Es kann auch sein das die Ursache für die Fehlermeldung ein paar Zeilen früher liegt.

    Und, wenn noch ein Fehler auf Grund des Quelltextes angezeigt wird ist ein Programm noch nicht fertig ⚠



  • DirkB schrieb:

    fread() gibt die Anzahl der gelesenen Zeichen/Bytes zurück.

    Das ist falsch.
    fread gibt die Anzahl der erfolgreich gelesenen Blöcke (von Zeichen/Bytes/...) zurück.



  • MichaelE schrieb:

    Aber an diesem Beispiel sieht man perfekt, dass es mir einfach schwer fehlt einzelne Aufgaben miteinander zu verknüpfen.

    Wenn es dir trotz vieler Versuche immer noch so schwer fällt, zu abstrahieren und dir einen "globaleren" Überblick über dein Programm zu verschaffen, solltest du vielleicht mal nach einem anderen Job Ausschau halten.

    SeppJ schrieb:

    Und damit dir alles klarer wird, versuch mal ein Hauptprogramm mit den Funktionen zu schreiben, egal ob sie schon vollständig funktionieren oder nicht. Fehler kannst du mit dieser Aufteilung recht gut isolieren und aufspüren.

    Übersichtlicher (und damit einfacher zu begreifen, auch noch nach längerer Zeit) ist es, Funktionalitäten zu separieren und in Funktionen zu kapseln. Auch die Fehlersuche wird dann viel einfacher, da du die Funktion in der der Fehler auftritt, einfacher ermitteln kannst. Sowas nennt man auch Top-Down Entwurf, also z.B.

    int main()
    {
      int anzahl;
      char *datei = "bla.bin";
      char *zieldatei[FILENAME_MAX];
    
      fehlerbehandlung( datei );
      ermittleZieldateiname( zieldatei, datei );
      anzahl = kopiere( datei, zieldatei );
    
      printf("%d Werte wurden kopiert.",anzahl );
      return 0;
    }
    
    void fehlerbehandlung( const char *name ) { /* hier dann konkret implementieren */ }
    ...
    void ermittleZieldateiname( char *zname, const char *name ) { /* hier dann konkret implementieren */ }
    ...
    


  • DirkB schrieb:

    was falsches über fread()

    Ups. 🙄

    Danke für die Richtigstellung.



  • Zur Ergänzung: Programm funktioniert nun endlich so wie es soll 🙂



  • Bei diesem Programm bekomme ich einen Zugriffsverletzung beim Schreiben, wenn ich das Programm starte, jedoch kann ich den FEhler nicht ausfindig machen..

    typedef struct
    {
    	char name[31];
    	int alter;
    }Person;
    
    int main()
    {
    	FILE *pRead;
    	FILE *pSave;
    	int anzahl = 0;
    
    	Person per;
    
    	pRead = fopen("Struktur.txt", "r");
    	pSave = fopen("PERSONEN1.BIN", "wb");
    
    	if(pRead == NULL)
    	{
    		printf("Fehler");
    		return 0;
    	}
    
    	if(pSave == NULL)
    	{
    		printf("Fehler");
    		return 0;
    	}
    
    	while(!feof(pRead))
    	{
    		fscanf(pRead, "%s", per.name);
    		fscanf(pRead, "%d", per.alter);
    		fwrite(&per.name, sizeof(per.name), 1, pSave);
    		fwrite(&per.alter, sizeof(per.alter), 1, pSave);
    
    		anzahl++;
    	}
    
    	printf("Anzahl: %d", anzahl);
    
    	fclose(pRead);
    	fclose(pSave);
    

  • Mod

    Es macht doch immer wieder Freude, wenn man sieht, dass drei Seiten gut gemeinter Hilfe zu sichtbaren Verbesserungen und Erfolgen führen [/ironie]

    Zum Fehler: Compilier mal mit Warnungen. So wie du es immer tun solltest.



  • DirkB * schrieb:

    Nebenbei ist name doch schon ein Zeiger. Da darfst du dann keinen Adressoperator (&) mehr nehmen 😮

    * Sinngemäß am 18:26:01 06.09.2011



  • http://www.cplusplus.com/reference/clibrary/cstdio/fwrite/

    Durchlesen und schauen was du anders in deinen Quelltexten machst 👍


Anmelden zum Antworten