ich verzweifel gerade ein bischen an folgendem Code:
Code: Alles auswählen
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct Kundendaten
{
  int   Kundennummer;
  char  Name[150];
  char  Adresse[200];
  char  Telefonnummer[15];
};
void loescheTastaturpuffer()
{
  int c;
  while( ((c = getchar()) != EOF) && (c != '\n') )
     ;
}
void setzeDatensatz (struct Kundendaten *k, int eingabe, int *datenGesetzt)
{
   int sizeName = 0, sizeAdr = 0, sizeTel = 0;   /* Groesse der Felder */
   sizeName = sizeof (k->Name);
   sizeAdr = sizeof (k->Adresse);
   sizeTel = sizeof (k->Telefonnummer);
   printf ("Setze Eintrag %d:\n\n", eingabe);
   printf ("Kundennummer: ");
   scanf ("%d", &k->Kundennummer);
   loescheTastaturpuffer();   /* sonst bleibt \n im Buffer */
   printf ("Name: ");
   fgets (k->Name, sizeName-1, stdin);
   printf ("Adresse: ");
   fgets (k->Adresse, sizeAdr-1, stdin);
   printf ("Telefonnummer: ");
   fgets (k->Telefonnummer, sizeTel-1, stdin);
      /* Null-Terminierung und \n entfernen */
//   k->Name[strlen(k->Name)-1] = '\0';
//   k->Adresse[strlen(k->Adresse)-1] = '\0';
//   k->Telefonnummer[strlen(k->Telefonnummer)-1] = '\0';
   *datenGesetzt = 1;   /* daran wird erkannt, dass schon Daten eingegeben wurden */
}
void zeigeDatensatz (struct Kundendaten *k, int i)
{
         printf ("Kundennummer: %d\n", k[i].Kundennummer);
         printf ("Name: %s\n", k[i].Name);
         printf ("Adresse: %s\n", k[i].Adresse);
         printf ("Telefonnummer: %s\n\n", k[i].Telefonnummer);
}
void DatenSpeichern (FILE *dateizeiger, struct Kundendaten *k, int *datenGesetzt)
{
   int i = 0;
   printf ("\nDaten werden gespeichert.\n\n");
   fseek (dateizeiger, 0, SEEK_SET);
   while ( i < 10 && datenGesetzt[i] == 1 && fwrite ( &k[i], sizeof(struct Kundendaten), 1, dateizeiger) ==1 )
    {
        printf ("Datensatz %d geschrieben...\n", i);
        zeigeDatensatz (k, i);
        i++;   /* in die Datei schreiben */
    }
   printf ("%d Elemente erfolgreich geschrieben!\n", i);
}
void Datenlesen (FILE *dateizeiger, struct Kundendaten *k, int *datenGesetzt)
{
    int i = 0;
    printf ("\nDaten werden gelesen.\n\n");
    fseek (dateizeiger, 0, SEEK_SET);
    while ( fread ( &k[i], sizeof(struct Kundendaten), 1, dateizeiger) ==1 )
    {
          printf ("Datensatz %d gelesen...\n", i);
          // zeigeDatensatz (k, i);
          if (&k[i].Kundennummer != 0)
           datenGesetzt[i] = 1;
          i++;
    } /* aus der Datei lesen */
}
void zeigeDatengesetzt (struct Kundendaten *k, int *datenGesetzt)
{
    int j;
    for (j = 0 ; j < 10; j++)
    {
        printf ("datenGesetzt [%d]: %d \n", j, datenGesetzt[j]);
        //zeigeDatensatz (k, j);
    }
}
void initall (struct Kundendaten *k)
{
    int i;
    for (i=0; i<10; i++)
    {
        k[i].Kundennummer = 0;
        k[i].Name[0] = '\0';
        k[i].Adresse[0] = '\0';
        k[i].Telefonnummer[0] = '\0';
    }
}
int main()
{
   struct Kundendaten kunden[10];
   unsigned int eingabe = 0;
   int          i = 0, j,
                datenGesetzt[10] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
   FILE *dateizeiger;
   const char DATEINAME[] = "testoutput.dat";
   initall (kunden);
     /* Versuchen, die Datei mit r+ zum Lesen und Schreiben zu oeffnen */
   dateizeiger = fopen (DATEINAME, "r+");
   if (dateizeiger == NULL)   /* dann zum Schreiben oeffnen (neu anlegen) */
   {
      dateizeiger = fopen (DATEINAME, "w");
      if (dateizeiger == NULL)
      {
         fputs ("Fehler: Datei konnte nicht geoeffnet werden!\n", stderr);
         return EXIT_FAILURE;
      }
   }
   do
   {
      printf ("Welchen Eintrag verwenden: (1-10; 0 = Programmende; 11 = Speichern; 12 = Einlesen ; 13 = Zeige Datengesetzt) ");
      scanf ("%u", &eingabe);
      if (eingabe == 0)
      {
        fclose (dateizeiger);
         return 0;   /* Programmende */
      }
      else if (eingabe == 11)
      {
          DatenSpeichern (dateizeiger, kunden, datenGesetzt);
          continue;
      }
      else if (eingabe == 12)
      {
          Datenlesen (dateizeiger, kunden, datenGesetzt);
          continue;
      }
      else if (eingabe == 13)
      {
            zeigeDatengesetzt (kunden, datenGesetzt);
            continue;
      }
      else if (eingabe > 10)
         continue;   /* sonst wird der zulaessige Bereich ueberschritten */
      i = eingabe -1;   /* Array-Index geht von 0 bis 9, Benutzereingabe aber von 1 bis 10 */
         /* wenn noch keine Daten eingegeben wurden, einlesen */
      if (datenGesetzt[i] == 0)   /* false */
         setzeDatensatz (&kunden[i], eingabe, &datenGesetzt[i]);
      else   /* true */
      {   /* sonst Daten anzeigen */
            zeigeDatensatz (kunden, i);
      }
   }
   while (1);   /* Endlosschleife */
   fclose (dateizeiger);
   return 0;
}
Bin für jede Hilfe dankbar.
Rappel


 
  
 

 
 
