Problem verschachtelten Strukturen



  • hallo,

    ich muss ein programm schreiben, welches 5 personen verwaltet.
    der benutzer soll vorname, name, bruttogehalt und das alter eingeben können.
    die eigaben sollen mittels fgets erfolgen.

    dann muss da noch ein menu rein, bei dem der benutzer zwischen 1. personendaten ändern, 2. personendaten ausgeben und 3. programm schliessen auswählen kann.

    beim ersten menu punkt soll er auswählen welche person er bearbeiten soll.

    es funktioniert soweit bis auf die eingaben.
    ich habe dort eine denkblockade ausserdem ist mir nicht klar warum ich fgets brauchen soll? das ist doch für pointers?
    benötige dringend hilfe!!!!!

    freundlich grüsse

    #include <stdio.h> /*bsp1.c*/
    #include <string.h>
    
    //ohne Zeiger
    
    struct S_Adresse
    {
    	char Strasse[100];
    	unsigned long PLZ;
    	char Ort[80];
    };
    
    struct Personendaten
    {
    	struct S_Adresse Adresse;
    	char Vorname[40];
    	char Nachname[40];
    	int Bruttogehalt;
    	int Alter;
    };
    
    int main()
    {
    	int x = 0; 
    	int y = 0;
    	int vor;
    	struct Personendaten person1, person2, person3, person4, person5;
    	struct S_Adresse adresse;
    
    	// Die Adresse fuer alle Personen
    	strcpy(adresse.Strasse,"Birkenweg 7");
    	adresse.PLZ=9000;
    	strcpy(adresse.Ort,"St.Gallen");
    
    	// Die Daten fuer die erste Person
    	strcpy(person1.Vorname,"Hans");
    	strcpy(person1.Nachname,"Kuster");
    	person1.Bruttogehalt=4000;
    	person1.Alter=29;
    
    	// Die gemeinsame Adresse
    	person1.Adresse = adresse;
    
    	// Die Daten fuer die zweite Person
    	strcpy(person2.Vorname,"Peter");
    	strcpy(person2.Nachname,"Hintermeister");
    	person2.Bruttogehalt=5200;
    	person2.Alter=47;
    
    	// Die gemeinsame Adresse
    	person2.Adresse = adresse;
    
    	// Die Daten fuer die dritte Person
    	strcpy(person3.Vorname,"Stein");
    	strcpy(person3.Nachname,"Reich");
    	person3.Bruttogehalt=9999;
    	person3.Alter=21;
    
    	// Die gemeinsame Adresse
    	person3.Adresse = adresse;
    
    	// Die Daten fuer die vierte Person
    	strcpy(person4.Vorname,"Bob");
    	strcpy(person4.Nachname,"Shoulder");
    	person4.Bruttogehalt=6500;
    	person4.Alter=44;
    
    	// Die gemeinsame Adresse
    	person4.Adresse = adresse;
    
    	// Die Daten fuer die fünfte Person
    	strcpy(person5.Vorname,"Mause");
    	strcpy(person5.Nachname,"Arm");
    	person5.Bruttogehalt=2500;
    	person5.Alter=39;
    
    	// Die gemeinsame Adresse
    	person5.Adresse = adresse;
    
    	do
    	{
    	  printf("1 - Personendaten eingeben\n"); 
          printf("2 - Personendaten ausgeben\n"); 
          printf("3 - Programm beenden\n");
          scanf("%i", &x); 
        switch(x)
        {
    
        case 1: 
    
          printf("Von Welcher Person möchten Sie die Angaben ändern?\n");       
          scanf("%i", &y);
        switch(y)
        {
            case 1:   printf("Bitte Vorname Eingeben:");
    
            break;
            case 2:
            break;
            case 3:
            break;
            case 4:
            break;
            case 5:
            break;
            default:
            printf("\nError, falsche Eingabe\n\n");
            break;
         }
        break;    
    
        case 2:
    
        // Ausgabe der ersten Struktur
    	printf("\n%s,%s. Alter:%i Bruttogehalt:%i\n",person1.Nachname, 
    	person1.Vorname,person1.Alter,person1.Bruttogehalt);
    	printf("%s\n%u %s\n\n",person1.Adresse.Strasse, 
    	person1.Adresse.PLZ,person1.Adresse.Ort);
    
    	// Ausgabe der zweiten Struktur
    	printf("%s,%s. Alter:%i Bruttogehalt:%i\n",person2.Nachname, 
    	person2.Vorname,person2.Alter,person2.Bruttogehalt);
    	printf("%s\n%u %s\n\n",person2.Adresse.Strasse, 
    	person2.Adresse.PLZ,person2.Adresse.Ort);
    
    		// Ausgabe der dritten Struktur
    	printf("%s,%s. Alter:%i Bruttogehalt:%i\n",person3.Nachname, 
    	person3.Vorname,person3.Alter,person3.Bruttogehalt);
    	printf("%s\n%u %s\n\n",person3.Adresse.Strasse, 
    	person3.Adresse.PLZ,person3.Adresse.Ort);
    
    		// Ausgabe der vierten Struktur
    	printf("%s,%s. Alter:%i Bruttogehalt:%i\n",person4.Nachname, 
    	person4.Vorname,person4.Alter,person4.Bruttogehalt);
    	printf("%s\n%u %s\n\n",person4.Adresse.Strasse, 
    	person4.Adresse.PLZ,person4.Adresse.Ort);
    
    		// Ausgabe der fünf Struktur
    	printf("%s,%s. Alter:%i Bruttogehalt:%i\n",person5.Nachname, 
    	person5.Vorname,person5.Alter,person5.Bruttogehalt);
    	printf("%s\n%u %s\n\n",person5.Adresse.Strasse, 
    	person5.Adresse.PLZ,person5.Adresse.Ort);
    	break;
    	case 3:        break; 
    
    	default:
        printf("\nError, falsche Eingabe\n\n");
        break;
    	}
    	}while (x!=3);
    }
    


  • Lass dich ins C-Forum verschieben. Das ist C Code. Oder willst du in C++ programmieren? Dann nimm std:string, std::cout und std::cin. Sorry, ich hatte keine Lust, deinen Code durchzuschauen. Aber was ich dir noch sagen will beim kurzen Drüberblicken, ist, dass du lieber nen Array oder nen std::vector nehmen solltest mittels Schleifen kombinieren (Indexzugriff oder Iteratoren). Da verringerst du deinen Code enorm. Du wirst es sehen.



  • wie wärs, wenn du die personendaten erstmal in einen array schreibst?
    dann musst auch nicht alles 5mal schreiben, sonder macht eine for-schleife.
    dann postest du deinen code nochmal und benutzt diesmal auch die c++-codetags

    [Edit]: bin viel zu langsam



  • sry, dass ich nochmals post, ist aber sehr wichtig!
    EDIT: die anfangsdaten sind eigentlich egal, können auch gleich sein!
    hier die neufassung:

    #include <stdio.h> /*bsp1.c*/
    #include <string.h>
    
    //ohne Zeiger
    
    struct S_Adresse
    {
    	char Strasse[100];
    	unsigned long PLZ;
    	char Ort[80];
    };
    
    struct Personendaten
    {
    	struct S_Adresse Adresse;
    	char Vorname[40];
    	char Nachname[40];
    	int Bruttogehalt;
    	int Alter;
    };
    
    int main()
    {
    	int x = 0; 
    	int y = 0;
    	int vor;
    	struct Personendaten person1, person2, person3, person4, person5;
    	struct S_Adresse adresse;
    
    	// Die Adresse fuer alle Personen
    	strcpy(adresse.Strasse,"Birkenweg 7");
    	adresse.PLZ=9000;
    	strcpy(adresse.Ort,"St.Gallen");
    
    	for(z=1;z==5;z++);
    	{
    	// Die Daten fuer die Personen
    	strcpy(person[z].Vorname,"Hans");
    	strcpy(person[z].Nachname,"Kuster");
    	person[z].Bruttogehalt=4000;
    	person[z].Alter=29;
    	// Die gemeinsame Adresse
    	person[z].Adresse = adresse;
    	}
    	do
    	{
    	  printf("1 - Personendaten eingeben\n"); 
          printf("2 - Personendaten ausgeben\n"); 
          printf("3 - Programm beenden\n");
          scanf("%i", &x); 
        switch(x)
        {
    
        case 1: 
    
          printf("Von Welcher Person möchten Sie die Angaben ändern?\n");       
          scanf("%i", &y);
        switch(y)
        {
            case 1:   printf("Bitte Vorname Eingeben:");
                      scanf("%fl", &vor)
                      strcpy(person1.Vorname,"%s", vor);
                      printf("Bitte  Eingeben:");
            break;
            case 2:
            break;
            case 3:
            break;
            case 4:
            break;
            case 5:
            break;
            default:
            printf("\nError, falsche Eingabe\n\n");
            break;
         }
        break;    
    
        case 2:
    
        // Ausgabe der Struktur
           for(z=1;z==5;z++);
           {
    	printf("\n%s,%s. Alter:%i Bruttogehalt:%i\n",person[z].Nachname, 
    	person[z].Vorname,person[z].Alter,person[z].Bruttogehalt);
    	printf("%s\n%u %s\n\n\n",person[z].Adresse.Strasse, 
    	person[z].Adresse.PLZ,person[z].Adresse.Ort);
           }
              break;
    	case 3:        break; 
    
    	default:
        printf("\nError, falsche Eingabe\n\n");
        break;
    	}
    	}while (x!=3);
    }
    


  • Tut mir Leid, aber ich habe nicht die zeit, dir hier ein fertiges, kompilierfähiges Programm zu schreiben. Was ist deine Frage? Wie ich sehe, hast du Arrays noch falsch verwendet:

    Personendaten person[5]; // struct ist unötig, std::vector<Personendaten> person(5);
    

    Statt strcpy() etc. nimmst du lieber std::string, statt printf() std::cout und für die Eingabe nimmst du std::cin. Nicht vergessen, die benötigten Header einzubinden.
    Naja, Eingabe köntne ungefähr so aussehen, mal kurz zusammengeschrieben:

    std::cout << "Von Welcher Person möchten Sie die Angaben ändern?" << std::endl;
    int input;
    std::cin >> input;
    std::string vorname, 
    std::cout << "Bitte Vorname Eingeben: ";
    std::cin >> vorname;
    // ...
    // am Schluß noch eingabe dem Objekt zuweisen
    

Anmelden zum Antworten