Gültigkeitsbereich Variabel? < C/C++ < Programmiersprachen < Praxis < Informatik < Vorhilfe
|
Hallo,
Ich möchte mit meinem Programm, den User veranlassen
zwei Variabeln einzugeben a,b der Compiler soll schauen ob a<=b ist
und dann die Werte zurückgeben in mein main().
Ich habe mir gedacht, dass ich das eigentl. mit einer do while schleife realisieren könnte:
folgender ausdruck ist entstanden:
double vergleiche(double a, double b)
{
do
{
cout<<"Untergrenze="<<endl;cin>>a;
cout<<"Obergrenze="<<endl;cin>>b;
}while(a>b);return a;return b;}
okay der Compiler vergleicht die Grenzen zwischen a und b. Wenn a kleiner als b ist fordert er brav mich auf erneut die Unter-Obergrenze einzutippen...... jedoch wenn er mich dann in die main() zurückwirft, stehen meine Globalvariabeln halt wieder auf a=0 b=0. . Wie kann ich ihn dazu bringen dass er mir die Speichergrößen nachdem ich sie eingegeben
habe abspeichert... oder ist die do while schleife für mein vorhaben ungeeignet....
lg martina
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 20:53 Mi 28.04.2010 | Autor: | rainerS |
Hallo Martina!
> Hallo,
>
> Ich möchte mit meinem Programm, den User veranlassen
> zwei Variabeln einzugeben a,b der Compiler soll schauen ob
> a<=b ist
> und dann die Werte zurückgeben in mein main().
> Ich habe mir gedacht, dass ich das eigentl. mit einer do
> while schleife realisieren könnte:
>
> folgender ausdruck ist entstanden:
>
>
> double vergleiche(double a, double b)
> {
>
> do
> {
> cout<<"Untergrenze="<<endl;cin>>a;
> cout<<"Obergrenze="<<endl;cin>>b;
> }while(a>b);return a;return b;}
>
> okay der Compiler vergleicht die Grenzen zwischen a und b.
> Wenn a kleiner als b ist fordert er brav mich auf erneut
> die Unter-Obergrenze einzutippen...... jedoch wenn er mich
> dann in die main() zurückwirft, stehen meine
> Globalvariabeln halt wieder auf a=0 b=0. . Wie kann ich ihn
> dazu bringen dass er mir die Speichergrößen nachdem ich
> sie eingegeben
> habe abspeichert... oder ist die do while schleife für
> mein vorhaben ungeeignet....
Das hat nichts mit der while-Schleife zu tun, sondern ist eine Folge der Parameterübergabe beim Funktionsaufruf. In C/C++ wird der Wert der Parameter übergeben, das heisst, beim Aufruf deiner Funktion, zum Beispiel
d = vergleiche(a,b);
werden Kopien der Variablen a und b angelegt; und in deiner While-Schleife änderst du die Werte dieser Kopien. Nach der Rückkehr in main() sind die Kopien weg. Diese Methode der Parameterübergabe heisst "call-by-value".
Du möchtest aber die Werte der Originalvariablen ändern. Dazu brauchst du eine andere Art der Parameterübergabe, genannt "call-by-reference". Dabei wird nur ein Verweis auf die Variable übergeben, sodass nicht mit einer Kopie, sondern mit dem Original gearbeitet wird. Die Definition der Funktion sieht so aus (ungetestet):
1: | void vergleiche(double &a, double &b)
| 2: | {
| 3: | do
| 4: | {
| 5: | cout << "Untergrenze=" << endl; cin >> a;
| 6: | cout << "Obergrenze=" << endl; cin >> b;
| 7: | } while(a>b);
| 8: | } |
Da direkt auf den Originalvariablen gearbeitet wird, brauchst du keinen Wert mit return zurückzugeben: Durch z.B. die Anweisung "cin >> a;" wird der Wert der entsprechenden Variablen in main() geändert.
Hier findest du eine ausführliche Erklärung.
Viele Grüße
Rainer
|
|
|
|