Daten aus einem Datei einlesen und in einem struct speichern

amine89

Mitglied
HALLO !
kann mir vlt jmd dabei helfen den Fehler in diesem Program zu erkennen?


C++:
#include<stdio.h>
int main (void)
{
  FILE *datei;
  
 
 typedef unsigned char BYTE;
 
    typedef struct{
    unsigned int Nr;
    char Nachname[20];
    char Vorname[20];
    unsigned int MatNr;
                 } tDatenStudent;


  datei = fopen ("test.txt", "r");
  if (datei != NULL)
  {
    fscanf (datei,"%s ", & tDatenStudent);
    
  }
  return 0;
}
danke
 
Versuch mal fread():

C:
size_t numEntries = fread(&tDatenStudent, sizeof(tDatenStudent), 1, datei);
printf("Gelesene Eintraege: %d\n", numEntries);
 
tDatenStudent ist ein Typ, du musst erst eine Instanz davon anlegen.

Beim nächsten mal bitte dein Problem genauer beschreiben: kompiliert das Programm überhaupt? Falls nicht: welche Fehlermeldungen werden ausgegeben? Falls ja: wie verhält sich das Programm und was würdest du stattdessen erwarten?

Grüße
Matthias
 
Schlagt mich wenn ich falsch liege, aber wenn man am Ende eines struct, also } erst den Bezeichner angiebt, dann kann man die Daten im struct nicht mehr ändern?

Ansonsten würde ich mal GetLastError() verwenden. (#include <Windows.h>)
 
Schlagt mich wenn ich falsch liege, aber wenn man am Ende eines struct, also } erst den Bezeichner angiebt, dann kann man die Daten im struct nicht mehr ändern?

Ansonsten würde ich mal GetLastError() verwenden. (#include <Windows.h>)




danke für die Hilfe , ich darf aber sowas noch nicht benutzen, da wir das noch nicht gelernt haben.

Die Aufgabestellung sieht so aus :
Entwickeln Sie ein Programm, das die in der Datei gespeicherten Daten zeilenweise
einliest und in einem Array mit der definierten Struktur speichert.
C++:
typedef unsigned char BYTE;
typedef struct{
unsigned int Nr;
char Nachname[20];
char Vorname[20|;
unsigned int MatNr;
} tDatenStudent;
 
danke für die Hilfe , ich darf aber sowas noch nicht benutzen, da wir das noch nicht gelernt haben.
Ach, ernsthaft? Ich mag diese Lehrweise überhaupt nicht, aber gut...
Die Aufgabestellung sieht so aus :
Entwickeln Sie ein Programm, das die in der Datei gespeicherten Daten zeilenweise
einliest und in einem Array mit der definierten Struktur speichert.
Zeilenweise? Aber da hat es doch ints drin? Das ist ja ein Minenfeld...
Entweder du nimmst Saftmeisters fread und überspringst das '\n'-Byte, oder du liest alles per fscanf() ein und verteilst das dann. Aber: Unschön.

Gruss
cwriter
 
du liest alles per fscanf() ein und verteilst das dann. Aber: Unschön.

meinst du das so ?
C++:
#include <stdio.h>
#include<stdlib.h>
 
int main (void)
{
  FILE *datei;
  
 
 typedef unsigned char BYTE;
 
    typedef struct{
    unsigned int Nr;
    char Nachname[20];
    char Vorname[20];
    unsigned int MatNr;
                 }tDatenStudent;


  datei = fopen ("test.txt", "r");
  if (datei != NULL)
  {
  	
  fscanf(datei, "%s",tDatenStudent);
  tDatenStudent ='\0';
  
   printf("%s\n",tDatenStudent);
   fclose (datei);
  }
  return 0;
}
 
Nein. Das ist falsch.
fscanf() liest bis zum Whitespace. Mit den ints im struct sehr unsicher. Vielleicht beendest du die Chararrays mit '\0', auch da bricht fscanf() ab.
Ich meine sowas wie
C:
fscanf(datei,"%d%s %s %d", &s.Nr,&s.Nachname,&s.Vorname,&s.MatNr);
Bei s == dein Struct

Aber bitte nimm fread.

Gruss
cwriter
 
danke für die Hilfe aber das zeigt mir imer noch den selben Fehler, das Programm erkennt nicht den struct was ich oben definiert habe !!
C++:
#include <stdio.h>
#include<stdlib.h>
 
int main (void)
{
  FILE *datei;
  
 
 typedef unsigned char BYTE;
 
    typedef struct{
    unsigned int Nr;
    char Nachname[20];
    char Vorname[20];
    unsigned int MatNr;
                 }tDatenStudent;


  datei = fopen ("test.txt", "r");
  if (datei != NULL)
  {
  	
  fscanf(datei,"%d %s %s %d", &tDatenStudent.Nr,&tDatenStudent.Nachname,&tDatenStudent.Vorname,&tDatenStudent.MatNr);
  tDatenStudent ='\0';
  
   printf("%s\n",datei);
   fclose (datei);
  }
  return 0;
}
 
Zurück