Daten aus einem Datei einlesen und in einem struct speichern

C:
#include <stdio.h>
#include<stdlib.h>
 
 typedef unsigned char BYTE;
 
struct tDatenStudent
{
    unsigned int Nr;
    char Nachname[20];
    char Vorname[20];
    unsigned int MatNr;
};
 
 
int main (void)
{
  FILE *datei;
  
  tDatenStudent tds;    //Du brachst eine Instanz, wo du die Werte tatsächlich speicherst.

  datei = fopen ("test.txt", "r");
  if (datei != NULL)
  {
    
  fscanf(datei,"%d %s %s %d", &tds.Nr,&tds.Nachname,&tds.Vorname,&tds.MatNr);
  
   printf("%s\n",datei);
   fclose (datei);
  }
  return 0;
}
Ich weiss ja nicht, wie deine Datei aussieht, aber das scheint mir doch etwas seltsam.

Erklärung: Du deklarierst den Typ tDatenStudent, der 4 + 20 + 20 + 4 Bytes = 48 Bytes gross ist. Doch diese 48 Bytes gehören dir nicht. Du sagst nur, dass tDatenStudent als Typ so viel Platz braucht. Mit der tds-Variable sagst du dem Compiler: tds ist meine Variable, und die soll bitte 48 Bytes gross sein. Und erst dann kannst du darin Werte speichern.

Gruss
cwriter
 
Zuletzt bearbeitet:
C:
#include <stdio.h>
#include<stdlib.h>
 
 typedef unsigned char BYTE;
 
struct tDatenStudent
{
    unsigned int Nr;
    char Nachname[20];
    char Vorname[20];
    unsigned int MatNr;
};
 
 
int main (void)
{
  FILE *datei;
  
  tDatenStudent tds;    //Du brachst eine Instanz, wo du die Werte tatsächlich speicherst.

  datei = fopen ("test.txt", "r");
  if (datei != NULL)
  {
    
  fscanf(datei,"%d %s %s %d", &tds.Nr,&tds.Nachname,&tds.Vorname,&tds.MatNr);
  
   printf("%s\n",datei);
   fclose (datei);
  }
  return 0;
}
Ich weiss ja nicht, wie deine Datei aussieht, aber das scheint mir doch etwas seltsam.

Erklärung: Du deklarierst den Typ tDatenStudent, der 4 + 20 + 20 + 4 Bytes = 48 Bytes gross ist. Doch diese 48 Bytes gehören dir nicht. Du sagst nur, dass tDatenStudent als Typ so viel Platz braucht. Mit der tds-Variable sagst du dem Compiler: tds ist meine Variable, und die soll bitte 48 Bytes gross sein. Und erst dann kannst du darin Werte speichern.

Gruss
cwriter

ich bekommen den selben Fehler !
 
ich bekommen den selben Fehler !

Der da ist?
Beim Kompilieren? Beim Ausführen? Text? Errorcode?
Vielleicht das
C:
int main(void)
zu
C:
int main(int argc, char* argv[])
ändern?

Ach so. Windows, hm?

C:
#include <stdio.h>
#include<stdlib.h>
 
 typedef unsigned char BYTE;
 
struct tDatenStudent
{
    unsigned int Nr;
    char Nachname[20];
    char Vorname[20];
    unsigned int MatNr;
};
 
 
int main (void)
{
  FILE *datei;
  
  tDatenStudent tds;    //Du brachst eine Instanz, wo du die Werte tatsächlich speicherst.
 
  fopen_s(datei, "test.txt", "r");
  if (datei != NULL)
  {
    
  fscanf_s(datei,"%d %s %s %d", &tds.Nr,sizeof(int),&tds.Nachname,20,&tds.Vorname,20,&tds.MatNr,sizeof(int));
  
   printf("%s\n",datei);
   fclose (datei);
  }
  return 0;
}

Gruss
cwriter
 
Zuletzt bearbeitet:
Wenn das Compiliere
C++:
#include <stdio.h>
#include<stdlib.h>
 
int main(int argc, char* argv[])
{
  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);
   printf("%d %s %s %d", tDatenStudent.Nr,tDatenStudent.Nachname,tDatenStudent.Vorname,tDatenStudent.MatNr);
   fclose (datei);
  }
  return 0;
}
Der Fehler lautet: expected expression before 'tDatenStudent'
 
Aber warum denn dieser Code wieder?
Dass der falsch ist, wurde schon mehrfach gesagt. Was sagt denn der Compiler zu diesem Code?
C:
#include <stdio.h>
#include<stdlib.h>
 
 typedef unsigned char BYTE;
 
struct tDatenStudent
{
    unsigned int Nr;
    char Nachname[20];
    char Vorname[20];
    unsigned int MatNr;
};
 
 
int main (void)
{
  FILE *datei;
  
  tDatenStudent tds;    //Du brachst eine Instanz, wo du die Werte tatsächlich speicherst.
 
  datei = fopen ("test.txt", "r");
  if (datei != NULL)
  {
    
  fscanf(datei,"%d %s %s %d", &tds.Nr,&tds.Nachname,&tds.Vorname,&tds.MatNr);
  
   printf("%s\n",datei);
   fclose (datei);
  }
  return 0;
}
Gruss
cwriter
 
Ach, du nutzt pures C?

Dann:
C:
#include <stdio.h>
#include<stdlib.h>
 
 typedef unsigned char BYTE;
 
typedef struct
{
    unsigned int Nr;
    char Nachname[20];
    char Vorname[20];
    unsigned int MatNr;
}tDatenStudent;
 
 
int main (void)
{
  FILE *datei;
  
  tDatenStudent tds;    //Du brachst eine Instanz, wo du die Werte tatsächlich speicherst.
 
  datei = fopen ("test.txt", "r");
  if (datei != NULL)
  {
    
  fscanf(datei,"%d %s %s %d", &tds.Nr,&tds.Nachname,&tds.Vorname,&tds.MatNr);
  
   printf("%s\n",datei);
   fclose (datei);
  }
  return 0;
}

Gruss
cwriter

/Edit: Darf man fragen, welchen Compiler und welche IDE du verwendest?
 
ja :=)

gerade läuft das, aber es wird nur die erste Zeile eingelesen und ausgegeben !

Ich hoffe , du hast noch einbisschen Zeit und Lust!

viel Dank
 
Zurück