1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Daten aus einem Datei einlesen und in einem struct speichern

Dieses Thema im Forum "C/C++" wurde erstellt von amine89, 5. Januar 2014.

  1. amine89

    amine89 Mitglied

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


    Code (C++):
    1. #include<stdio.h>
    2. int main (void)
    3. {
    4.   FILE *datei;
    5.  
    6.  
    7.  typedef unsigned char BYTE;
    8.  
    9.     typedef struct{
    10.     unsigned int Nr;
    11.     char Nachname[20];
    12.     char Vorname[20];
    13.     unsigned int MatNr;
    14.                  } tDatenStudent;
    15.  
    16.  
    17.   datei = fopen ("test.txt", "r");
    18.   if (datei != NULL)
    19.   {
    20.     fscanf (datei,"%s ", & tDatenStudent);
    21.    
    22.   }
    23.   return 0;
    24. }
    danke
     
  2. saftmeister

    saftmeister Nutze den Saft! Premium-User

    Versuch mal fread():

    Code (C):
    1. size_t numEntries = fread(&tDatenStudent, sizeof(tDatenStudent), 1, datei);
    2. printf("Gelesene Eintraege: %d\n", numEntries);
     
  3. amine89

    amine89 Mitglied

    ne leider hat nicht funktioniert :( !
     
  4. Matthias Reitinger

    Matthias Reitinger ɐɯıǝɹ

    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
     
  5. Hunter

    Hunter Erfahrenes Mitglied

    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>)
     
  6. amine89

    amine89 Mitglied




    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.
    Code (C++):
    1. typedef unsigned char BYTE;
    2. typedef struct{
    3. unsigned int Nr;
    4. char Nachname[20];
    5. char Vorname[20|;
    6. unsigned int MatNr;
    7. } tDatenStudent;
     
  7. cwriter

    cwriter Erfahrenes Mitglied

    Ach, ernsthaft? Ich mag diese Lehrweise überhaupt nicht, aber gut...
    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
     
  8. amine89

    amine89 Mitglied

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

    meinst du das so ?
    Code (C++):
    1. #include <stdio.h>
    2. #include<stdlib.h>
    3.  
    4. int main (void)
    5. {
    6.   FILE *datei;
    7.  
    8.  
    9.  typedef unsigned char BYTE;
    10.  
    11.     typedef struct{
    12.     unsigned int Nr;
    13.     char Nachname[20];
    14.     char Vorname[20];
    15.     unsigned int MatNr;
    16.                  }tDatenStudent;
    17.  
    18.  
    19.   datei = fopen ("test.txt", "r");
    20.   if (datei != NULL)
    21.   {
    22.    
    23.   fscanf(datei, "%s",tDatenStudent);
    24.   tDatenStudent ='\0';
    25.  
    26.    printf("%s\n",tDatenStudent);
    27.    fclose (datei);
    28.   }
    29.   return 0;
    30. }
     
  9. cwriter

    cwriter Erfahrenes Mitglied

    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
    Code (C):
    1. fscanf(datei,"%d%s %s %d", &s.Nr,&s.Nachname,&s.Vorname,&s.MatNr);
    Bei s == dein Struct

    Aber bitte nimm fread.

    Gruss
    cwriter
     
  10. amine89

    amine89 Mitglied

    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 !!
    Code (C++):
    1. #include <stdio.h>
    2. #include<stdlib.h>
    3.  
    4. int main (void)
    5. {
    6.   FILE *datei;
    7.  
    8.  
    9.  typedef unsigned char BYTE;
    10.  
    11.     typedef struct{
    12.     unsigned int Nr;
    13.     char Nachname[20];
    14.     char Vorname[20];
    15.     unsigned int MatNr;
    16.                  }tDatenStudent;
    17.  
    18.  
    19.   datei = fopen ("test.txt", "r");
    20.   if (datei != NULL)
    21.   {
    22.    
    23.   fscanf(datei,"%d %s %s %d", &tDatenStudent.Nr,&tDatenStudent.Nachname,&tDatenStudent.Vorname,&tDatenStudent.MatNr);
    24.   tDatenStudent ='\0';
    25.  
    26.    printf("%s\n",datei);
    27.    fclose (datei);
    28.   }
    29.   return 0;
    30. }
     
  11. cwriter

    cwriter Erfahrenes Mitglied

    Code (C):
    1. #include <stdio.h>
    2. #include<stdlib.h>
    3.  
    4.  typedef unsigned char BYTE;
    5.  
    6. struct tDatenStudent
    7. {
    8.     unsigned int Nr;
    9.     char Nachname[20];
    10.     char Vorname[20];
    11.     unsigned int MatNr;
    12. };
    13.  
    14.  
    15. int main (void)
    16. {
    17.   FILE *datei;
    18.  
    19.   tDatenStudent tds;    //Du brachst eine Instanz, wo du die Werte tatsächlich speicherst.
    20.  
    21.   datei = fopen ("test.txt", "r");
    22.   if (datei != NULL)
    23.   {
    24.    
    25.   fscanf(datei,"%d %s %s %d", &tds.Nr,&tds.Nachname,&tds.Vorname,&tds.MatNr);
    26.  
    27.    printf("%s\n",datei);
    28.    fclose (datei);
    29.   }
    30.   return 0;
    31. }
    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: 6. Januar 2014
  12. amine89

    amine89 Mitglied

    ich bekommen den selben Fehler !
     
  13. cwriter

    cwriter Erfahrenes Mitglied

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

    Ach so. Windows, hm?

    Code (C):
    1. #include <stdio.h>
    2. #include<stdlib.h>
    3.  
    4.  typedef unsigned char BYTE;
    5.  
    6. struct tDatenStudent
    7. {
    8.     unsigned int Nr;
    9.     char Nachname[20];
    10.     char Vorname[20];
    11.     unsigned int MatNr;
    12. };
    13.  
    14.  
    15. int main (void)
    16. {
    17.   FILE *datei;
    18.  
    19.   tDatenStudent tds;    //Du brachst eine Instanz, wo du die Werte tatsächlich speicherst.
    20.  
    21.   fopen_s(datei, "test.txt", "r");
    22.   if (datei != NULL)
    23.   {
    24.    
    25.   fscanf_s(datei,"%d %s %s %d", &tds.Nr,sizeof(int),&tds.Nachname,20,&tds.Vorname,20,&tds.MatNr,sizeof(int));
    26.  
    27.    printf("%s\n",datei);
    28.    fclose (datei);
    29.   }
    30.   return 0;
    31. }
    Gruss
    cwriter
     
    Zuletzt bearbeitet: 6. Januar 2014
  14. amine89

    amine89 Mitglied

    auch nicht :(
     
  15. cwriter

    cwriter Erfahrenes Mitglied

    Auch nicht mit dem Edit?
    Was ist denn die Fehlermeldung?

    Gruss
    cwriter
     
  16. amine89

    amine89 Mitglied

    Wenn das Compiliere
    Code (C++):
    1. #include <stdio.h>
    2. #include<stdlib.h>
    3.  
    4. int main(int argc, char* argv[])
    5. {
    6.   FILE *datei;
    7.  
    8.  
    9.  typedef unsigned char BYTE;
    10.  
    11.     typedef struct{
    12.     unsigned int Nr;
    13.     char Nachname[20];
    14.     char Vorname[20];
    15.     unsigned int MatNr;
    16.                  }tDatenStudent;
    17.  
    18.  
    19.   datei = fopen ("test.txt", "r");
    20.   if (datei != NULL)
    21.   {
    22.    
    23.   fscanf(datei,"%d %s %s %d", &tDatenStudent.Nr,&tDatenStudent.Nachname,&tDatenStudent.Vorname,&tDatenStudent.MatNr);
    24.    printf("%d %s %s %d", tDatenStudent.Nr,tDatenStudent.Nachname,tDatenStudent.Vorname,tDatenStudent.MatNr);
    25.    fclose (datei);
    26.   }
    27.   return 0;
    28. }
    Der Fehler lautet: expected expression before 'tDatenStudent'
     
  17. cwriter

    cwriter Erfahrenes Mitglied

    Aber warum denn dieser Code wieder?
    Dass der falsch ist, wurde schon mehrfach gesagt. Was sagt denn der Compiler zu diesem Code?
    Code (C):
    1. #include <stdio.h>
    2. #include<stdlib.h>
    3.  
    4.  typedef unsigned char BYTE;
    5.  
    6. struct tDatenStudent
    7. {
    8.     unsigned int Nr;
    9.     char Nachname[20];
    10.     char Vorname[20];
    11.     unsigned int MatNr;
    12. };
    13.  
    14.  
    15. int main (void)
    16. {
    17.   FILE *datei;
    18.  
    19.   tDatenStudent tds;    //Du brachst eine Instanz, wo du die Werte tatsächlich speicherst.
    20.  
    21.   datei = fopen ("test.txt", "r");
    22.   if (datei != NULL)
    23.   {
    24.    
    25.   fscanf(datei,"%d %s %s %d", &tds.Nr,&tds.Nachname,&tds.Vorname,&tds.MatNr);
    26.  
    27.    printf("%s\n",datei);
    28.    fclose (datei);
    29.   }
    30.   return 0;
    31. }
    Gruss
    cwriter
     
  18. amine89

    amine89 Mitglied

    Da bekomme ich als Fehler
    19 3 C:\Users\MAr\Desktop\bik.c [Error] unknown type name 'tDatenStudent'

    grüße
    Amine
     
  19. cwriter

    cwriter Erfahrenes Mitglied

    Ach, du nutzt pures C?

    Dann:
    Code (C):
    1. #include <stdio.h>
    2. #include<stdlib.h>
    3.  
    4.  typedef unsigned char BYTE;
    5.  
    6. typedef struct
    7. {
    8.     unsigned int Nr;
    9.     char Nachname[20];
    10.     char Vorname[20];
    11.     unsigned int MatNr;
    12. }tDatenStudent;
    13.  
    14.  
    15. int main (void)
    16. {
    17.   FILE *datei;
    18.  
    19.   tDatenStudent tds;    //Du brachst eine Instanz, wo du die Werte tatsächlich speicherst.
    20.  
    21.   datei = fopen ("test.txt", "r");
    22.   if (datei != NULL)
    23.   {
    24.    
    25.   fscanf(datei,"%d %s %s %d", &tds.Nr,&tds.Nachname,&tds.Vorname,&tds.MatNr);
    26.  
    27.    printf("%s\n",datei);
    28.    fclose (datei);
    29.   }
    30.   return 0;
    31. }
    Gruss
    cwriter

    /Edit: Darf man fragen, welchen Compiler und welche IDE du verwendest?
     
  20. amine89

    amine89 Mitglied

    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
     
Die Seite wird geladen...