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?
-
Die
mitarbeiteranzahl
ist immer 0, denn du übergibst bloß eine Kopie anneuanlegen
. Damitneuanlegen
diemitarbeiteranzahl
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 anneuanlegen
. Damitneuanlegen
diemitarbeiteranzahl
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];