Seite 1 von 1

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

Verfasst: Mi Dez 13, 2017 10:48 am
von powerschaf
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);
}

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

Verfasst: Mi Dez 13, 2017 12:14 pm
von Xin
Ja, ich glaube auch.

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

Programmierst Du C oder C++?

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

Verfasst: Mi Dez 13, 2017 1:00 pm
von cloidnerux
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);
}

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

Verfasst: Mi Dez 13, 2017 2:01 pm
von powerschaf
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:

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

Verfasst: Mi Dez 13, 2017 2:59 pm
von Xin
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

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

Verfasst: Mi Dez 13, 2017 3:41 pm
von powerschaf
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

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

Verfasst: Mi Dez 13, 2017 3:55 pm
von powerschaf
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:

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

Verfasst: Mi Dez 13, 2017 3:56 pm
von cloidnerux
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...

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

Verfasst: Mo Jan 08, 2018 11:22 am
von mfro
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.

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

Verfasst: Mo Jan 08, 2018 11:51 am
von Xin
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.