Unterprogramme in C

Neue Frage »

Auf diesen Beitrag antworten »
Yoshee Unterprogramme in C

Hi, ich habe folgendes Progamm:

int main (void)
{

int jahr, gebjahr, alter;
printf ("\nAktuelles Jahr: ");
scanf ("%d", &jahr);
printf ("\nGeburtsjahr: ");
scanf ("%d", &gebjahr);
alter = jahr - gebjahr;
AusgabeAlter (alter);
return (0);
}
void AusgabeAlter (int a) {
printf("\nDas Alter betraegt %d Jahre\n\n",a);
}

Das AusgabeAlter habe ich ja schon als Unterprogamm geschrieben, jetzt will ich auch das Eingabe Jahr als Unterprogamm schreiben, möglichst mit
eigener variable. Das Unterprogamm hab ich:

int Eingabe Jahr(void) {
int year;
printf ("\nAktuelles Jahr: ");
scanf ("%d", &year);
return (year);
}
Ich weiß jetzt nicht, wie ich das Pogramm "einleite". Ich hab schon alles mögliche probiert, kann mir bitte jemand helfen?
danke

Yoshee
 
Auf diesen Beitrag antworten »
ed209

Um den Rückgabewert zu erhalten musst du das Ergebnis der Funktion der Variable zuweisen. Der Funktionsname sollte aus nur einem Wort bestehen.
Es ist auch nicht verkehrt, sich schon bei kleineren Programmen anzugewöhnen Kommentare zu Unterprogrammen einzufügen.

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
int main (void)
{
   int jahr, gebjahr, alter;
   jahr=Eingabe_Jahr();
   ...
}


// Eingabe_Jahr liest eine Jahreszahl von der Tastatur ein.

int Eingabe_Jahr(void) 
{
   int year; 
   printf ("\nAktuelles Jahr: ");
   scanf ("%d", &year);
   return (year);
}



Gruss,
ED
Auf diesen Beitrag antworten »
Yoshee

mhh, jetzt krieg ich folgende Fehlermeldung:

\quell.cpp(8) : error C2065: 'year': nichtdeklarierter Bezeichner
.\quell.cpp(8) : error C3861: "Zusatz": Bezeichner wurde nicht gefunden.
.\quell.cpp(18) : error C2365: "Zusatz": Erneute Definition; vorherige Definition war "Ehemals unbekannter Bezeichner".

Ich versteh auch nicht woher das Programm weiß, dass Variable year= Variable jahr ist...
Auf diesen Beitrag antworten »
ed209

Zitat:
Original von Yoshee
mhh, jetzt krieg ich folgende Fehlermeldung:

\quell.cpp(8) : error C2065: 'year': nichtdeklarierter Bezeichner
.\quell.cpp(8) : error C3861: "Zusatz": Bezeichner wurde nicht gefunden.
.\quell.cpp(18) : error C2365: "Zusatz": Erneute Definition; vorherige Definition war "Ehemals unbekannter Bezeichner".

Ich versteh auch nicht woher das Programm weiß, dass Variable year= Variable jahr ist...


Sorry das war ein Flüchtigkeitsfehler, ich meinte jahr statt year oben.
Ich änder das mal oben.

Aber ich halte es für keine gute Idee plain-C als C++ zu kompilieren. Das würde ich sauberer Trennen (hab mal an einem Projekt gesponnen, daß C und C++ wild gemischt hat, das war wirklich furchbar).

Gruss,
ED

PS: Aber woher das Wort "Zusatz" kommt, ist mir schleierhaft.
 
Auf diesen Beitrag antworten »
Yoshee

achso, das war ein Flüchtigkeitsfehler von mir, ich hab das Unterprogramm "zusatz" genannt.... Augenzwinkern

ähm, kann ich mit microsoft vc++ in c kompilieren? oder mss ich jetzt alles umscheiben?
Auf diesen Beitrag antworten »
Yoshee

Ok, ich habs jetzt in C hinbekommen.
Nächste Frage:
Ich soll folgende Korektur einbauen:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
int Korr (int j) {
	if (j < 20) {
		j = j +2000;
	}
	else {
		if (j < 100) {
			j = j + 1900;
		}
	}
	return (j );}


Ich hab
code:
1:
alter = Korr();

und
code:
1:
Korr (alter);

probiert, aber das scheint ja beides falsch zu sein...
kann mir jemand beim aufrufen helfen?
Auf diesen Beitrag antworten »
evok

Zitat:
Original von Yoshee
Ok, ich habs jetzt in C hinbekommen.
Nächste Frage:
Ich soll folgende Korektur einbauen:

Ich hab
code:
1:
alter = Korr();

in diesem fall gibst du deiner Funktion Korr nichts mit, woher soll sie also wissen welchen wert das j hat, (geschweige denn dass es mit einem compiler error abgebrochen ist)
Zitat:

und
code:
1:
Korr (alter);


in diesem fall gibst du zwar das aktuelle alter in die funktion mit, rechnest in der Funktion auch prima damit, lieferst es auch prima zurück heraus, jedoch weist du den zurückgelieferten wert niemals deiner ursprünglichen variable im Hauptprogramm zu.

Verstehst du was ich meine?
Wenn du eine Funktion haben willst, die einen Wert verändert hast du zwei Möglichkeiten:
die eine wären Pointer (aber da ich annehme dass du das noch nicht kannst nehmen wir die zweite und dies läuft über den Return value, nur solange du den Return value keiner anderen Variable im Hauptprogramm zuweist arbeitet dein Unterprogramm/Funktion zwar munter vor sich hin, aber leider interessiert sich niemand für das Ergebnis, also den Rückgabewert.
Quintessenz dieses elend langen Bandwurmsatzes ist die Funktion mit dem Parameter Alter aufzurufen und gleichzeitig dem Alter zuzweisen.
Ich poste die Lösung bewusst nicht weil ich sehn will ob du verstanden hast was ich meine

lg
h
 
Neue Frage »
Antworten »


Verwandte Themen