1. Sem. Studi braucht Hilfe, Aufgabe umständlich gelöst

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
powerschaf
Beiträge: 13
Registriert: Mi Dez 13, 2017 10:41 am

1. Sem. Studi braucht Hilfe, Aufgabe umständlich gelöst

Beitrag von powerschaf » Mi Dez 13, 2017 10:48 am

Hallo ihr Lieben,
Aufgabe war es eine Mitarbeiter Datenbank zu erstellen. Folgendes soll vorhanden sein:
1. Kleines Auswahlmenü
2. Auswahl zwischen Mitarbeiter erstellen und Mitarbeiteriste anzeigen

Es reicht eine Datenbank für 10 Mitarbeiter.
Wenn Sie voll ist soll das Programm eine Meldung ausgeben.
(Bonusaufgabe wäre eine Löschfunktion, hab ich aber noch nicht gemacht)


Mein Programm funktioniert , aber ich glaube ich habe es viel zu umständlich gelöst.
Ich bin im 1. Semester und lerne noch fleißig :roll: , kann mir jemand sagen wie ich es das Programm einfacher hätte schreiben können?

Hier der Code:

Code: Alles auswählen

#include <stdlib.h>
#include <string.h>

typedef struct s_datum //Strucktur Datum
{
    int tag,monat,jahr;
}datum;

typedef enum _rolle //Strucktur Rolle
{
    Entwickler ,
    Projektleiter,
    Manager
} Rolle;

 typedef struct _person //Strucktur Person
{
    char name[25];
    int gehalt;
    Rolle rolle;
    datum neu;
}Person;


int anzahl_Personen = 0;
int liste = 1;
Person Mitarbeiter[10]; //Array mit 10 möglichen Eintraegen

//Erstellt Person1 im Array von Mitarbeiter[0]
void erstelle_Person1(){
        anzahl_Personen++;
        printf("Mitarbeiter Nr.%d\n",anzahl_Personen);
        printf("Name des Mitarbeiters: \n");
        scanf("%s",Mitarbeiter[0].name);              //Mitarbeiter[0] greift auf den ersten Platz im Array von Mitarbeiter[10] zu.
        printf("Gehalt des Mitarbeiters: \n");
        scanf("%d",&Mitarbeiter[0].gehalt);
        printf("Rolle des Mitarbeiters: (1-Entwickler , 2-Projektleiter, 3-Manager)\n");
        scanf("%u",&Mitarbeiter[0].rolle);
        printf("Eintrittsdatum des Mitarbeiters:\n");
        scanf("%2d %2d %4d",&Mitarbeiter[0].neu.tag, &Mitarbeiter[0].neu.monat, &Mitarbeiter[0].neu.jahr);}
void erstelle_Person2(){
        anzahl_Personen++;
        printf("Mitarbeiter Nr.%d\n",anzahl_Personen);
        printf("Name des Mitarbeiters: \n");
        scanf("%s",Mitarbeiter[1].name);
        printf("Gehalt des Mitarbeiters: \n");
        scanf("%d",&Mitarbeiter[1].gehalt);
        printf("Rolle des Mitarbeiters: (1-Entwickler , 2-Projektleiter, 3-Manager)\n");
        scanf("%u",&Mitarbeiter[1].rolle);
        printf("Eintrittsdatum des Mitarbeiters:\n");
        scanf("%2d %2d %4d",&Mitarbeiter[1].neu.tag, &Mitarbeiter[1].neu.monat, &Mitarbeiter[1].neu.jahr);}
void erstelle_Person3(){
        anzahl_Personen++;
        printf("Mitarbeiter Nr.%d\n",anzahl_Personen);
        printf("Name des Mitarbeiters: \n");
        scanf("%s",Mitarbeiter[2].name);
        printf("Gehalt des Mitarbeiters: \n");
        scanf("%d",&Mitarbeiter[2].gehalt);
        printf("Rolle des Mitarbeiters: (1-Entwickler , 2-Projektleiter, 3-Manager)\n");
        scanf("%u",&Mitarbeiter[2].rolle);
        printf("Eintrittsdatum des Mitarbeiters:\n");
        scanf("%2d %2d %4d",&Mitarbeiter[2].neu.tag, &Mitarbeiter[2].neu.monat, &Mitarbeiter[2].neu.jahr);}
void erstelle_Person4(){
        anzahl_Personen++;
        printf("Mitarbeiter Nr.%d\n",anzahl_Personen);
        printf("Name des Mitarbeiters: \n");
        scanf("%s",Mitarbeiter[3].name);
        printf("Gehalt des Mitarbeiters: \n");
        scanf("%d",&Mitarbeiter[3].gehalt);
        printf("Rolle des Mitarbeiters: (1-Entwickler , 2-Projektleiter, 3-Manager)\n");
        scanf("%u",&Mitarbeiter[3].rolle);
        printf("Eintrittsdatum des Mitarbeiters:\n");
        scanf("%2d %2d %4d",&Mitarbeiter[3].neu.tag, &Mitarbeiter[3].neu.monat, &Mitarbeiter[3].neu.jahr);}
void erstelle_Person5(){
        anzahl_Personen++;
        printf("Mitarbeiter Nr.%d\n",anzahl_Personen);
        printf("Name des Mitarbeiters: \n");
        scanf("%s",Mitarbeiter[4].name);
        printf("Gehalt des Mitarbeiters: \n");
        scanf("%d",&Mitarbeiter[4].gehalt);
        printf("Rolle des Mitarbeiters: (1-Entwickler , 2-Projektleiter, 3-Manager)\n");
        scanf("%u",&Mitarbeiter[4].rolle);
        printf("Eintrittsdatum des Mitarbeiters:\n");
        scanf("%2d %2d %4d",&Mitarbeiter[4].neu.tag, &Mitarbeiter[4].neu.monat, &Mitarbeiter[4].neu.jahr);}
void erstelle_Person6(){
        anzahl_Personen++;
        printf("Mitarbeiter Nr.%d\n",anzahl_Personen);
        printf("Name des Mitarbeiters: \n");
        scanf("%s",Mitarbeiter[5].name);
        printf("Gehalt des Mitarbeiters: \n");
        scanf("%d",&Mitarbeiter[5].gehalt);
        printf("Rolle des Mitarbeiters: (1-Entwickler , 2-Projektleiter, 3-Manager)\n");
        scanf("%u",&Mitarbeiter[5].rolle);
        printf("Eintrittsdatum des Mitarbeiters:\n");
        scanf("%2d %2d %4d",&Mitarbeiter[5].neu.tag, &Mitarbeiter[5].neu.monat, &Mitarbeiter[5].neu.jahr);}
void erstelle_Person7(){
        anzahl_Personen++;
        printf("Mitarbeiter Nr.%d\n",anzahl_Personen);
        printf("Name des Mitarbeiters: \n");
        scanf("%s",Mitarbeiter[6].name);
        printf("Gehalt des Mitarbeiters: \n");
        scanf("%d",&Mitarbeiter[6].gehalt);
        printf("Rolle des Mitarbeiters: (1-Entwickler , 2-Projektleiter, 3-Manager)\n");
        scanf("%u",&Mitarbeiter[6].rolle);
        printf("Eintrittsdatum des Mitarbeiters:\n");
        scanf("%2d %2d %4d",&Mitarbeiter[6].neu.tag, &Mitarbeiter[6].neu.monat, &Mitarbeiter[6].neu.jahr);}
void erstelle_Person8(){
        anzahl_Personen++;
        printf("Mitarbeiter Nr.%d\n",anzahl_Personen);
        printf("Name des Mitarbeiters: \n");
        scanf("%s",Mitarbeiter[7].name);
        printf("Gehalt des Mitarbeiters: \n");
        scanf("%d",&Mitarbeiter[7].gehalt);
        printf("Rolle des Mitarbeiters: (1-Entwickler , 2-Projektleiter, 3-Manager)\n");
        scanf("%u",&Mitarbeiter[7].rolle);
        printf("Eintrittsdatum des Mitarbeiters:\n");
        scanf("%2d %2d %4d",&Mitarbeiter[7].neu.tag, &Mitarbeiter[7].neu.monat, &Mitarbeiter[7].neu.jahr);}
void erstelle_Person9(){
        anzahl_Personen++;
        printf("Mitarbeiter Nr.%d\n",anzahl_Personen);
        printf("Name des Mitarbeiters: \n");
        scanf("%s",Mitarbeiter[8].name);
        printf("Gehalt des Mitarbeiters: \n");
        scanf("%d",&Mitarbeiter[8].gehalt);
        printf("Rolle des Mitarbeiters: (1-Entwickler , 2-Projektleiter, 3-Manager)\n");
        scanf("%u",&Mitarbeiter[8].rolle);
        printf("Eintrittsdatum des Mitarbeiters:\n");
        scanf("%2d %2d %4d",&Mitarbeiter[8].neu.tag, &Mitarbeiter[8].neu.monat, &Mitarbeiter[8].neu.jahr);}
void erstelle_Person10(){
        anzahl_Personen++;
        printf("Mitarbeiter Nr.%d\n",anzahl_Personen);
        printf("Name des Mitarbeiters: \n");
        scanf("%s",Mitarbeiter[9].name);
        printf("Gehalt des Mitarbeiters: \n");
        scanf("%d",&Mitarbeiter[9].gehalt);
        printf("Rolle des Mitarbeiters: (1-Entwickler , 2-Projektleiter, 3-Manager)\n");
        scanf("%u",&Mitarbeiter[9].rolle);
        printf("Eintrittsdatum des Mitarbeiters:\n");
        scanf("%2d %2d %4d",&Mitarbeiter[9].neu.tag, &Mitarbeiter[9].neu.monat, &Mitarbeiter[9].neu.jahr);}

//ausgabe_Person1() gibt die Daten von Mitarbeiter[0] aus.
void ausgabe_Person1(){
        printf("Person Nummer: %d\n\n",liste);
        liste++;
        printf("Der Name des Mitarbeiters:%s\n",Mitarbeiter[0].name);
        printf("Das Gehalt des Mitarbeiters:%d Euro\n",Mitarbeiter[0].gehalt);
        printf("Die Rolle des Mitarbeiters:%u\n(1-Entwickler , 2-Projektleiter, 3-Manager)\n",Mitarbeiter[0].rolle);
        printf("Das Eintrittsdatum des Mitarbeiters: %d.%d.%d\n",Mitarbeiter[0].neu.tag, Mitarbeiter[0].neu.monat,Mitarbeiter[0].neu.jahr);
}
void ausgabe_Person2(){
        printf("Person Nummer: %d\n\n",liste);
        liste++;
        printf("Der Name des Mitarbeiters:%s\n",Mitarbeiter[1].name);
        printf("Das Gehalt des Mitarbeiters:%d Euro\n",Mitarbeiter[1].gehalt);
        printf("Die Rolle des Mitarbeiters:%u\n(1-Entwickler , 2-Projektleiter, 3-Manager)\n",Mitarbeiter[1].rolle);
        printf("Das Eintrittsdatum des Mitarbeiters: %d.%d.%d\n",Mitarbeiter[1].neu.tag, Mitarbeiter[1].neu.monat,Mitarbeiter[1].neu.jahr);
}
void ausgabe_Person3(){
        printf("Person Nummer: %d\n\n",liste);
        liste++;
        printf("Der Name des Mitarbeiters:%s\n",Mitarbeiter[2].name);
        printf("Das Gehalt des Mitarbeiters:%d Euro\n",Mitarbeiter[2].gehalt);
        printf("Die Rolle des Mitarbeiters:%u\n(1-Entwickler , 2-Projektleiter, 3-Manager)\n",Mitarbeiter[0].rolle);
        printf("Das Eintrittsdatum des Mitarbeiters: %d.%d.%d\n",Mitarbeiter[2].neu.tag, Mitarbeiter[2].neu.monat,Mitarbeiter[2].neu.jahr);
}
void ausgabe_Person4(){
       printf("Person Nummer: %d\n\n",liste);
        liste++;
        printf("Der Name des Mitarbeiters:%s\n",Mitarbeiter[3].name);
        printf("Das Gehalt des Mitarbeiters:%d Euro\n",Mitarbeiter[3].gehalt);
        printf("Die Rolle des Mitarbeiters:%u\n(1-Entwickler , 2-Projektleiter, 3-Manager)\n",Mitarbeiter[0].rolle);
        printf("Das Eintrittsdatum des Mitarbeiters: %d.%d.%d\n",Mitarbeiter[3].neu.tag, Mitarbeiter[3].neu.monat,Mitarbeiter[3].neu.jahr);
}
void ausgabe_Person5(){
        printf("Person Nummer: %d\n\n",liste);
        liste++;
        printf("Der Name des Mitarbeiters:%s\n",Mitarbeiter[4].name);
        printf("Das Gehalt des Mitarbeiters:%d Euro\n",Mitarbeiter[4].gehalt);
        printf("Die Rolle des Mitarbeiters:%u\n(1-Entwickler , 2-Projektleiter, 3-Manager)\n",Mitarbeiter[4].rolle);
        printf("Das Eintrittsdatum des Mitarbeiters: %d.%d.%d\n",Mitarbeiter[4].neu.tag, Mitarbeiter[4].neu.monat,Mitarbeiter[4].neu.jahr);
}
void ausgabe_Person6(){
        printf("Person Nummer: %d\n\n",liste);
        liste++;
        printf("Der Name des Mitarbeiters:%s\n",Mitarbeiter[5].name);
        printf("Das Gehalt des Mitarbeiters:%d Euro\n",Mitarbeiter[5].gehalt);
        printf("Die Rolle des Mitarbeiters:%u\n(1-Entwickler , 2-Projektleiter, 3-Manager)\n",Mitarbeiter[0].rolle);
        printf("Das Eintrittsdatum des Mitarbeiters: %d.%d.%d\n",Mitarbeiter[5].neu.tag, Mitarbeiter[5].neu.monat,Mitarbeiter[5].neu.jahr);
}
void ausgabe_Person7(){
        printf("Person Nummer: %d\n\n",liste);
        liste++;
        printf("Der Name des Mitarbeiters:%s\n",Mitarbeiter[6].name);
        printf("Das Gehalt des Mitarbeiters:%d Euro\n",Mitarbeiter[6].gehalt);
        printf("Die Rolle des Mitarbeiters:%u\n(1-Entwickler , 2-Projektleiter, 3-Manager)\n",Mitarbeiter[6].rolle);
        printf("Das Eintrittsdatum des Mitarbeiters: %d.%d.%d\n",Mitarbeiter[6].neu.tag, Mitarbeiter[6].neu.monat,Mitarbeiter[6].neu.jahr);
}
void ausgabe_Person8(){
        printf("Person Nummer: %d\n\n",liste);
        liste++;
        printf("Der Name des Mitarbeiters:%s\n",Mitarbeiter[7].name);
        printf("Das Gehalt des Mitarbeiters:%d Euro\n",Mitarbeiter[7].gehalt);
        printf("Die Rolle des Mitarbeiters:%u\n(1-Entwickler , 2-Projektleiter, 3-Manager)\n",Mitarbeiter[0].rolle);
        printf("Das Eintrittsdatum des Mitarbeiters: %d.%d.%d\n",Mitarbeiter[7].neu.tag, Mitarbeiter[7].neu.monat,Mitarbeiter[7].neu.jahr);
}
void ausgabe_Person9(){
        printf("Person Nummer: %d\n\n",liste);
        liste++;
        printf("Der Name des Mitarbeiters:%s\n",Mitarbeiter[8].name);
        printf("Das Gehalt des Mitarbeiters:%d Euro\n",Mitarbeiter[8].gehalt);
        printf("Die Rolle des Mitarbeiters:%u\n(1-Entwickler , 2-Projektleiter, 3-Manager)\n",Mitarbeiter[8].rolle);
        printf("Das Eintrittsdatum des Mitarbeiters: %d.%d.%d\n",Mitarbeiter[8].neu.tag, Mitarbeiter[8].neu.monat,Mitarbeiter[8].neu.jahr);
}
void ausgabe_Person10(){
        printf("Person Nummer: %d\n\n",liste);
        liste++;
        printf("Der Name des Mitarbeiters:%s\n",Mitarbeiter[9].name);
        printf("Das Gehalt des Mitarbeiters:%d Euro\n",Mitarbeiter[9].gehalt);
        printf("Die Rolle des Mitarbeiters:%u\n(1-Entwickler , 2-Projektleiter, 3-Manager)\n",Mitarbeiter[9].rolle);
        printf("Das Eintrittsdatum des Mitarbeiters: %d.%d.%d\n",Mitarbeiter[9].neu.tag, Mitarbeiter[9].neu.monat,Mitarbeiter[9].neu.jahr);
}

int main()
{

    int wahl;

while(anzahl_Personen<=10){
    printf("Die Datenbank enthaelt %d Mitarbeiter\n\n",anzahl_Personen);
    printf("Was wollen Sie tun?\n\n1-Mitarbeiter hinzufuegen\n2-Liste ansehen.\n\n");
    scanf("%d",&wahl);

if (wahl == 1){

    switch(anzahl_Personen){
    case 0: erstelle_Person1();break;
    case 1: erstelle_Person2();break;
    case 2: erstelle_Person3();break;
    case 3: erstelle_Person4();break;
    case 4: erstelle_Person5();break;
    case 5: erstelle_Person6();break;
    case 6: erstelle_Person7();break;
    case 7: erstelle_Person8();break;
    case 8: erstelle_Person9();break;
    case 9: erstelle_Person10();break;
    default: printf("Datenbank voll\n");}

    }
    else if (wahl == 2){
        switch(anzahl_Personen){
        case 1: ausgabe_Person1();break;
        case 2: ausgabe_Person1();ausgabe_Person2();break;
        case 3: ausgabe_Person1();ausgabe_Person2();ausgabe_Person3();break;
        case 4: ausgabe_Person1();ausgabe_Person2();ausgabe_Person3();ausgabe_Person4();break;
        case 5: ausgabe_Person1();ausgabe_Person2();ausgabe_Person3();ausgabe_Person4();ausgabe_Person5();break;
        case 6: ausgabe_Person1();ausgabe_Person2();ausgabe_Person3();ausgabe_Person4();ausgabe_Person5();ausgabe_Person6();break;
        case 7: ausgabe_Person1();ausgabe_Person2();ausgabe_Person3();ausgabe_Person4();ausgabe_Person5();ausgabe_Person6();ausgabe_Person7();break;
        case 8: ausgabe_Person1();ausgabe_Person2();ausgabe_Person3();ausgabe_Person4();ausgabe_Person5();ausgabe_Person6();ausgabe_Person7();ausgabe_Person8();break;
        case 9: ausgabe_Person1();ausgabe_Person2();ausgabe_Person3();ausgabe_Person4();ausgabe_Person5();ausgabe_Person6();ausgabe_Person7();ausgabe_Person8();ausgabe_Person9();break;
        case 10:ausgabe_Person1();ausgabe_Person2();ausgabe_Person3();ausgabe_Person4();ausgabe_Person5();ausgabe_Person6();ausgabe_Person7();ausgabe_Person8();ausgabe_Person9();ausgabe_Person10();break;
        default : printf("Falsche Eingabe\n\n");
        }
    }
else{printf("ungueltige Eingabe\n");}
        }



return(0);
}

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: 1. Sem. Studi braucht Hilfe, Aufgabe umständlich gelöst

Beitrag von Xin » Mi Dez 13, 2017 12:14 pm

Ja, ich glaube auch.

Warum machst Du Sachen wie AusgabePersonX nicht mit AusgabePerson( int Index )?

Programmierst Du C oder C++?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: 1. Sem. Studi braucht Hilfe, Aufgabe umständlich gelöst

Beitrag von cloidnerux » Mi Dez 13, 2017 1:00 pm

Du hast ja schonmal richtig angefangen, ein Struct anzulegen und davon dann ein Fixes array.
Du hast ja auch verstanden, dass du mit den eckigen Klammern auf die einzelnen Elemente zugreifen kannst.
Jetzt braucht es nur noch den Zugrif aus einer Variable:
https://www.proggen.org/doku.php?id=c:tutorial:arrays

Und dann wird aus

Code: Alles auswählen

ausgabe_Person1()
ein

Code: Alles auswählen

ausgabe_Person(1)
und aus deinem Switch-Case ein einfaches

Code: Alles auswählen

for(int i = 0; i < anzahl_Personen; i++){
    ausgabe_Person(i);
}
Redundanz macht wiederholen unnötig.
quod erat expectandum

powerschaf
Beiträge: 13
Registriert: Mi Dez 13, 2017 10:41 am

Re: 1. Sem. Studi braucht Hilfe, Aufgabe umständlich gelöst

Beitrag von powerschaf » Mi Dez 13, 2017 2:01 pm

VIELEN DANK <3 ... Ich wusste einfach nicht wie ich es besser umsetzte , die Grundprinzipien habe ich verstanden. Ich änder den Code gleich mal und lade den "einfachen" mal hoch wenn ich fertig bin.

Achja, ich programmiere C ^^ müssen wir im 1. Semester :roll:

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: 1. Sem. Studi braucht Hilfe, Aufgabe umständlich gelöst

Beitrag von Xin » Mi Dez 13, 2017 2:59 pm

powerschaf hat geschrieben:VIELEN DANK <3 ... Ich wusste einfach nicht wie ich es besser umsetzte , die Grundprinzipien habe ich verstanden. Ich änder den Code gleich mal und lade den "einfachen" mal hoch wenn ich fertig bin.

Achja, ich programmiere C ^^ müssen wir im 1. Semester :roll:
Oftmals muss man es einfach mal gesehen haben.

Okay, C... dann passt das soweit.
typedef struct s_... {} ist korrekte C-Programmierung. Ob das schön ist.. ist Geschmackssache.
Ansonsten lege die globalen Variablen noch in die main-Funktion, wenn Du sie nicht wirklich global brauchst.
cloidnerux hat geschrieben:Redundanz macht wiederholen unnötig.
Wie immer eine passende Signatur. :D
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

powerschaf
Beiträge: 13
Registriert: Mi Dez 13, 2017 10:41 am

Re: 1. Sem. Studi braucht Hilfe, Aufgabe umständlich gelöst

Beitrag von powerschaf » Mi Dez 13, 2017 3:41 pm

Also ich bin erstmal weiter ... So schauts momentan aus:

Code: Alles auswählen

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
typedef struct s_datum //Strucktur Datum
{
    int tag,monat,jahr;
}datum;
 
typedef enum _rolle //Strucktur Rolle
{
    Entwickler ,
    Projektleiter,
    Manager
} Rolle;
 
typedef struct _person //Strucktur Person
{
    char name[25];
    int gehalt;
    Rolle rolle;
    datum neu;
}Person;
 
 
int anzahl_Personen = 0;
int liste = 1;
 
Person Mitarbeiter[10];
 

void erstelle_Person(){
        anzahl_Personen++;
        printf("Mitarbeiter Nr.%d\n",anzahl_Personen);
        printf("Name des Mitarbeiters: \n");
        scanf("%s",Mitarbeiter[0].name);              
        printf("Gehalt des Mitarbeiters: \n");
        scanf("%d",&Mitarbeiter[0].gehalt);
        printf("Rolle des Mitarbeiters: (1-Entwickler , 2-Projektleiter, 3-Manager)\n");
        scanf("%u",&Mitarbeiter[0].rolle);
        printf("Eintrittsdatum des Mitarbeiters:\n");
        scanf("%2d %2d %4d",&Mitarbeiter[0].neu.tag, &Mitarbeiter[0].neu.monat, &Mitarbeiter[0].neu.jahr);}
 
 
 
void ausgabe_Person(){
        printf("Person Nummer: %d\n\n",liste);
        liste++;
        printf("Der Name des Mitarbeiters:%s\n",Mitarbeiter[0].name);
        printf("Das Gehalt des Mitarbeiters:%d Euro\n",Mitarbeiter[0].gehalt);
        printf("Die Rolle des Mitarbeiters:%u\n(1-Entwickler , 2-Projektleiter, 3-Manager)\n",Mitarbeiter[0].rolle);
        printf("Das Eintrittsdatum des Mitarbeiters: %d.%d.%d\n",Mitarbeiter[0].neu.tag, Mitarbeiter[0].neu.monat, Mitarbeiter[0].neu.jahr);}
 
 
 
int main(){
 
int wahl;
while(anzahl_Personen<=10){
    printf("Die Datenbank enthaelt %d Mitarbeiter\n\n",anzahl_Personen);
    printf("Was wollen Sie tun?\n\n1-Mitarbeiter hinzufuegen\n2-Liste ansehen.\n\n");
    scanf("%d",&wahl);
 
if (wahl == 1){
        for(int i = 0; i < 10; i++){
                erstelle_Person(i);break;}}
 
   if (wahl == 2){
        for(int i = 0; i < anzahl_Personen; i++){
                ausgabe_Person(i);}}
}
return(0);}

Bleibt leider noch das Problem mit der Zuweisung im Array , da hab ich leider einen Knoten im Kopf... Struckturen hab ich komplett verstanden , das ist kein Problem.
Mein konkretes Problem ist... Ich will etwas haben wie

Code: Alles auswählen

 Person Mitarbeiter[x]
und das bekomme ich nicht hin das lässt der compiler absolut nicht mit sich machen :x

powerschaf
Beiträge: 13
Registriert: Mi Dez 13, 2017 10:41 am

Re: 1. Sem. Studi braucht Hilfe, Aufgabe umständlich gelöst

Beitrag von powerschaf » Mi Dez 13, 2017 3:55 pm

mein Ideenansatz wär noch sowas wie

Code: Alles auswählen

 Person Mitarbeiter[sizeof(erstelle_Person())]
weil das Array ja dann immer genauso viel Speicher bekommt wie es haben müsste ... Das ging irgendwie aber da hab ich nicht so ganz durchgeblickt :( Ich sitze jetzt seit 9 Uhr dran und gestern auch schon den ganzen Tag, das Ergebnis was dann diese gruselige switch Geschichte :mrgreen: :mrgreen:
Ich bin sehr gewillt jede info aufzusaugen und zu lernen. Ich will es einfach nur verstehen ... :idea:

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: 1. Sem. Studi braucht Hilfe, Aufgabe umständlich gelöst

Beitrag von cloidnerux » Mi Dez 13, 2017 3:56 pm

Mein konkretes Problem ist... Ich will etwas haben wie

Code: Alles auswählen

Person Mitarbeiter[x]
und das bekomme ich nicht hin das lässt der compiler absolut nicht mit sich machen :x
Steht so im C/C++ Standard, Arraydeklarationen sind nur mit fester Größe möglich.
Das was du haben möchtest, ein beloiebig großes Array, ist nur mithilfe von Zeigern und Speicherverwaltung möglich:
https://www.proggen.org/doku.php?id=c:tutorial:pointer
https://www.proggen.org/doku.php?id=c:tutorial:memory

Ein Kommentar zu deinem Programmierstil:
Vermeide globale Variablen, es besteht fast nie die Notwendigkeit für solche und sie Sorgen nur für Kopfschmerzen und Probleme.
Dein Code sollte zumindest für dich korrekt eingerückt sein. Es compiliert auch ohne, aber wenn man sich selber verwirrt, kommt man nicht schneller zum ziel.

Du kannst einem Funktionsaufruf Parameter übergeben

Code: Alles auswählen

void myFunc(int par){
    printf("%d", par);
}
[...]
myFunc(9);
Und du solltest auch die Indizierung über Variablen gestalten, als immer das Element 0 auszugeben...
Redundanz macht wiederholen unnötig.
quod erat expectandum

mfro
Beiträge: 346
Registriert: Mi Jan 16, 2013 4:58 pm

Re: 1. Sem. Studi braucht Hilfe, Aufgabe umständlich gelöst

Beitrag von mfro » Mo Jan 08, 2018 11:22 am

cloidnerux hat geschrieben:
Mein konkretes Problem ist... Ich will etwas haben wie

Code: Alles auswählen

Person Mitarbeiter[x]
und das bekomme ich nicht hin das lässt der compiler absolut nicht mit sich machen :x
Steht so im C/C++ Standard, Arraydeklarationen sind nur mit fester Größe möglich
Das stimmt übrigens so nicht - seit C99 (und das ist ja immerhin bald schon 19 Jahre her) geht genau das: variable length arrays.
Man kann also (beispielsweise) so was schreiben:

Code: Alles auswählen

FILE *path_fopen(char *path, char *file, char *mode)
{
    char str[strlen(path) + 1 + strlen(file) + 1];
    strcpy(str, path);
    strcat(str, "\\");
    strcat(str, file);
    return fopen(str, mode);
}
Ob das allerdings (immer) eine gute Idee ist (schliesslich wird ein Array auf dem - begrenzten - Stack angelegt, von dem man im Vorhinein nicht weiss, wie gross es wird), sei mal dahingestellt.
Das ist übrigens ein Bereich, in dem sich C von C++ wegbewegt. Dort geht so was (manche sagen: zum Glück) nicht.
It's as simple as that. And remember, Beethoven wrote his first symphony in C.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: 1. Sem. Studi braucht Hilfe, Aufgabe umständlich gelöst

Beitrag von Xin » Mo Jan 08, 2018 11:51 am

Im Falle von nested Functions könnte das möglicherweise zum Problem werden. Ich bin nicht sicher, ob die Implementation, wie sie in C++ benutzt wird, damit noch klarkommen könnte.
Sowas kann C allerdings nicht, weswegen es da kein Problem ist.
Der C++-Compiler meckert sowas jedenfalls an.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten