Fehler bei Ausgabe von Daten aus der Struktur



  • //---------------------------------------------------------------------------
    
    #pragma hdrstop
    
    //---------------------------------------------------------------------------
    
    #pragma argsused
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    #define MAX 100
    
    struct my_struct {
      char name[80], phone_number[80];
      int  age, height;
    } my_friend;
    
    int getline(char *s, int lim);
    
    int main (void)
    {
      char Name[MAX], Nummer[MAX], Hoehe[MAX], Alter[MAX];
      float wahl;
      int Nalter, NHoehe;
    
      printf("Hier können sie Daten von Personen eingeben\n");
      printf("-------------------------------------------\n");
      printf("Bitte geben sie den Namen der Person ein\n");
      fgets(Name, MAX, stdin);
      printf("-------------------------------------------\n");
      printf("Bitte geben sie die Telefonnummer der Person ein\n");
      fgets(Nummer, MAX, stdin);
      printf("-------------------------------------------\n");
      printf("Bitte geben sie das Alter der Person ein\n");
      fgets(Alter, MAX, stdin);
      printf("-------------------------------------------\n");
      printf("Bitte geben sie die Größe der Person ein\n");
      fgets(Hoehe, MAX, stdin);
      printf("-------------------------------------------\n");
      printf("Welche Daten möchten sie denn wieder ausgegeben haben ?\n 1 Name\ 2 Telefonnummer\ 3 Alter\ 4 Groesse\n");
      scanf("%g",&wahl);
      if (wahl==1)     /* Name ausgeben */
      {
        strcpy(my_friend.name, Name);   /* accessing an element */
        printf("%s", my_friend.name);
      }
    
      if (wahl==2)     /* Name ausgeben */
      {
        strcpy(my_friend.phone_number, Nummer);   /* accessing an element */
        printf("%s", my_friend.phone_number);
      }
    
      if (wahl==3)     /* Name ausgeben */
      {
        strcpy(my_friend.age, Alter);   /* accessing an element */
        printf("%s", my_friend.name);
      }
      if (wahl==4)     /* Name ausgeben */
      {
        strcpy(my_friend.height, Hoehe);   /* accessing an element */
        printf("%s", my_friend.height);
      }
    
      getch();
      return 0;
    }
    //---------------------------------------------------------------------------
    

    Das Problem bei der ganzen Sache ist, dass wenn man die Daten am Ende über die Zahl ausgeben möchte, ein Fehler auftritt.

    strcpy(my_friend.height, Hoehe);
    
    strcpy(my_friend.age, Alter);
    

    Jeweils erscheint eine Fehlermeldung: [C++ Error] a6_1.c(57): E2342 Type mismatch in parameter '__dest' (wanted 'signed char *', got 'int').

    Woran könnte dieser Fehler denn liegen ?



  • na das kann ja auch nicht gehen, strcpy() erwartet als 2. parameter ja auch einen const char*, du übergibst aber einen integer-wert!
    mach auch alter und größe einfach strings, dann läuft die sache denke ich 😉

    Mfg Helmut`



  • Oehm, wie waere es mit einer einfachen Zuweisung? Es sind integer, du kannst my_friend.age=20; ausfuehren und es tut. Mir scheint du haettest das Kapitel strcpy nicht voellig verstanden, lies dir Manualpages dazu durch, dann wirst du den Fehler selber erkennen.



  • Ich hab es jetzt mal so geschrieben ! 🙂

    //---------------------------------------------------------------------------
    
    #pragma hdrstop
    
    //---------------------------------------------------------------------------
    
    #pragma argsused
    //---------------------------------------------------------------------------
    
    #pragma argsused
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <ctype.h>
    #include <conio.h>
    
    #define MAX 100
    
    struct my_struct {
      char name[80], phone_number[80];
      int age[20], height[20];
    } my_friend;
    
    int main (void)
    {
      char Name[MAX], Nummer[MAX], Hoehe[MAX], Alter[MAX], Entscheidung[MAX];
      float wahl, test;
      int Entscheidungslen;
    
      printf("Hier können sie Daten von Personen eingeben\n");
      printf("-------------------------------------------\n");
      printf("Bitte geben sie den Namen der Person ein\n");
      fgets(Name, MAX, stdin);
      printf("-------------------------------------------\n");
      printf("Bitte geben sie die Telefonnummer der Person ein\n");
      fgets(Nummer, MAX, stdin);
      printf("-------------------------------------------\n");
      printf("Bitte geben sie das Alter der Person ein\n");
      fgets(Alter, MAX, stdin);
      printf("-------------------------------------------\n");
      printf("Bitte geben sie die Größe der Person ein\n");
      fgets(Hoehe, MAX, stdin);
      printf("-------------------------------------------\n");
      printf("Welche Daten möchten sie denn wieder ausgegeben haben ?\n 1 Name\ 2 Telefonnummer\ 3 Alter\ 4 Groesse\n");
      scanf("%g",&wahl);
    
      /* Ausgabe der gewünschten Daten. Durch die Auswahl der gewünschten Zahl,
      wird der jeweilige Datensatz aus der Struktur ausgegeben. Die Daten, die die Variablen
      innerhalb der Struktur gespeichert haben, werden aus der Struktur  */
    
      if (wahl==1)                      /* Name ausgeben */
      {
        strcpy(my_friend.name, Name);   /* accessing an element */
        printf("%s", my_friend.name);
      }
    
      if (wahl==2)                                /* Telefonnumer ausgeben */
      {
        strcpy(my_friend.phone_number, Nummer);   /* accessing an element */
        printf("%s", my_friend.phone_number);
      }
    
      if (wahl==3)
      {
        strcpy(my_friend.age, Alter);
        printf("%s", my_friend.age);
      }
    
      if (wahl==4)
      {
        strcpy(my_friend.height, Hoehe);
        printf("%s", my_friend.height);
      }
      Entscheidung[MAX] = 0;
      printf("Wollen sie noch eine Information abfragen ? - (J)a oder (N)ein ?\n");
      scanf("%s", Entscheidung);
      Entscheidungslen = strlen(Entscheidung);
      if (Entscheidungslen == 2)
      {
        printf("Welche Daten möchten sie denn wieder ausgegeben haben ?\n 1 Name\ 2 Telefonnummer\ 3 Alter\ 4 Groesse\n");
        scanf("%g",&wahl);
    
      /* Ausgabe der gewünschten Daten. Durch die Auswahl der gewünschten Zahl,
      wird der jeweilige Datensatz aus der Struktur ausgegeben. Die Daten, die die Variablen
      innerhalb der Struktur gespeichert haben, werden aus der Struktur  */
    
        if (wahl==1)                      /* Name ausgeben */
        {
          strcpy(my_friend.name, Name);   /* accessing an element */
          printf("%s", my_friend.name);
        }
    
        if (wahl==2)                                /* Telefonnumer ausgeben */
        {
          strcpy(my_friend.phone_number, Nummer);   /* accessing an element */
          printf("%s", my_friend.phone_number);
        }
    
        if (wahl==3)
        {
          strcpy(my_friend.age, Alter);
          printf("%s", my_friend.age);
        }
    
        if (wahl==4)
        {
          strcpy(my_friend.height, Hoehe);
          printf("%s", my_friend.height);
        }
      }
      else
      {
        printf("Es werden nun keine weiteren Daten mehr ausgegeben.\n");
      }
      getch();
      return 0;
    }
    //---------------------------------------------------------------------------
    
    //---------------------------------------------------------------------------
    //---------------------------------------------------------------------------
    


  • @chillbert
    Autsch. 😮

    Mach das wieder rückgängig und schreib anstatt:

    strcpy(my_friend.age, Alter);
    

    ganz einfach:

    my_friend.age = atoi(Alter);
    

    und das gleiche natürlich bei Höhe. 🙄



  • Wenn ich das mache, dann bekomme ich eine Fehlermeldung:

    [C++ Error] a6_1_2.c(72): E2277 Lvalue required

    Vorher ging des mal besser !

    EDIT 1: Wenn dann geht es schon so:

    *my_friend.height = atoi(Hoehe);
        printf("%d", *my_friend.height);
    


  • @chillbert
    Zeig bitte nochmal die Deklaration deiner Struktur. Ich vermute nämlich, dass du die Änderung daran nicht Rückgängig gemacht hast, wie ich es dir gesagt habe.



  • Ich verstehe dein Problem nicht so ganz. Du hast einen Integer in deiner Struktur und liest (nimm scanf) einen Interger ein. Diesen weist du dann einfach dem deiner Struktur zu. Oder du nutzt Funktionen wie atoi/g_ascii_dtostr um den Integer in einen String zu wandeln. Lies dir bitte mal ein Buch ueber die Sprache C durch.


Anmelden zum Antworten