Unterprogramme in C |
Yoshee
Grünschnabel
Dabei seit: 23.10.2006
Beiträge: 4
|
|
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
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Yoshee: 23.10.2006 05:02.
|
|
23.10.2006 05:01 |
|
|
ed209
Routinier
Dabei seit: 07.09.2006
Beiträge: 324
|
|
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
|
|
23.10.2006 11:41 |
|
|
Yoshee
Grünschnabel
Dabei seit: 23.10.2006
Beiträge: 4
|
|
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...
|
|
23.10.2006 11:58 |
|
|
ed209
Routinier
Dabei seit: 07.09.2006
Beiträge: 324
|
|
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.
|
|
23.10.2006 12:27 |
|
|
Yoshee
Grünschnabel
Dabei seit: 23.10.2006
Beiträge: 4
|
|
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
und
probiert, aber das scheint ja beides falsch zu sein...
kann mir jemand beim aufrufen helfen?
|
|
24.10.2006 00:19 |
|
|
evok
Grünschnabel
Dabei seit: 02.10.2006
Beiträge: 3
|
|
Zitat: |
Original von Yoshee
Ok, ich habs jetzt in C hinbekommen.
Nächste Frage:
Ich soll folgende Korektur einbauen:
Ich hab
|
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)
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
|
|
24.10.2006 20:16 |
|
|
|