Problem mit Ausgabe



  • hiho,
    hab folgendes Problem:
    In der Funktion "Ausgabe" (Zeile 19 - 26) wird nur der erste printf befehl ausgeführt, aber nicht das jeweilige Gehalt der Mitarbeiter ausgegeben. Woran kann das liegen?


  • Mod

    Die mitarbeiteranzahl ist immer 0, denn du übergibst bloß eine Kopie an neuanlegen . Damit neuanlegen die mitarbeiteranzahl verändern kann, musst du dies so machen:

    void neuanlegen (int gehalt[], int *mitarbeiterzahl)
    
    // ...
    
     case 1  : neuanlegen(gehalt, &mitarbeiterzahl);
    

    Du wirst aber noch ein anderes Problem bekommen: Dein Gehaltsfeld hat eine Ausdehnung von 0. Da musst du dir was anderes einfallen lassen. Das übliche Vorgehen wäre, aus gehalt einen Zeiger zu machen und dann nach der Abfrage der Mitarbeiterzahl passend Speicher mittels malloc anzufordern.

    Oder wenn du jetzt bloß Bahnhof verstehst, dann kannst du auch gehalt einfach eine feste Größe geben und musst dann eben zusehen, dass diese nie überschritten wird.



  • SeppJ schrieb:

    Die mitarbeiteranzahl ist immer 0, denn du übergibst bloß eine Kopie an neuanlegen . Damit neuanlegen die mitarbeiteranzahl verändern kann, musst du dies so machen:

    void neuanlegen (int gehalt[], int *mitarbeiterzahl)
    
    // ...
    
     case 1  : neuanlegen(gehalt, &mitarbeiterzahl);
    

    habs mal ausprobiert, aber da haut mir der compiler ein paar Fehlermeldungen um die Ohren, mit denen ich grad nicht allzuviel anfangen kann:

    (10): warning #2234: Argument 2 to 'scanf' does not match the format string; expected 'int *' but found 'int * *'.
    (11): error #2168: Operands of '<=' have incompatible types 'int *' and 'int'.
    (11): error #2168: Operands of '>' have incompatible types 'int *' and 'int'.
    (13): error #2168: Operands of '<' have incompatible types 'int' and 'int *'.
    (43): error #2140: Type error in argument 2 to 'neuanlegen'; expected 'int *' but found 'int'.

    Oder wenn du jetzt bloß Bahnhof verstehst, dann kannst du auch gehalt einfach eine feste Größe geben und musst dann eben zusehen, dass diese nie überschritten wird.

    laut Aufgabenstellung soll man auch nur maximal das Gehalt für 100 Mitarbeiter eingeben können. Oder meinst du damit die höhe des Gehalts?



  • Du hast die Zeiger in C nicht verstanden. Da wirst du es weiterhin schwer haben.
    fflush(stdin) ist undefiniert und somit Schrott.
    Dir ist wohl bewusst, dass du C99 verwendest. Deine Programme werden dann mit C89 nicht compilieren.
    Wenn du weisst, dass du 100 Mitarbeiter benötigst, wo steht dann die Zahl 100 in deinem Code?



  • Wenn du mit Zeigern und dem Adressoperator Schwierigkeiten hast kannst du auch gern der Funktion einen Rückgabewert geben.

    int neuanlegen (int gehalt[], int mitarbeiterzahl) {
      ....
      return mitarbeiterzahl
    }
    // ...
    
     case 1  : mitarbeiterzahl = neuanlegen(gehalt, mitarbeiterzahl);
    

    Was SeppJ noch meinte ist

    int main (void) {
    ...
    int mitarbeiterzahl=0;
    ...
    int gehalt[mitarbeiterzahl];
    

    Was meinst du füe wie viel Einträge in gehalt Platz ist?
    Richtig: 0 - gar keine.

    Deshalb

    #include <...>
    
    #define MAX_MITARBEITER 100
    
    int main (void) {
    ...
    int mitarbeiterzahl=0;
    ...
    int gehalt[MAX_MITARBEITER];
    

Log in to reply