Void Funktion
-
Hallo,
ich hab eine Frage zu einer void Funktion und zwar:
hab ich in ihr eine if-else-Schleife drin und im else-Zweig soll die Funktion neu gestartet werden, aber zuvor natürlich beendet werden, sonst kommt es da ja bestimmt zu komplikationen. Kann mir da jemand nen Tipp geben?
[code]
void navigator()
{int x;
// generiert Zahlen
x= 10 + (rand()%(100-10+1));if(x< 90)
{
// mach irgendwas
}
else
{
//funktion neu starten und aber vorherigen Aufruf beenden
}
-
Benutze eine while Schleife und gib als Bedingung x>=90 an und lasse jenachdem weiter laufen oder x in der schleife neu berechnen.
Ach und if-else ist keine Schleife das ist ne Verzweiung bzw. Anweisung

-
yogoo schrieb:
[...] und im else-Zweig soll die Funktion neu gestartet werden, aber zuvor natürlich beendet werden [...]
Wenn du die Funktion navigator() im else Zweig der Funktion navigator erneut aufrufst, ist die aufrufende Funktion noch nicht beendet! Es ensteht in diesem Fall eine endlos-Rekursion.
Caipi
-
sind sonst läbles 'ne lösung? dann wird zumindest die Rekursion vermieden.
void navigator() { int x; anfang: // generiert Zahlen x= 10 + (rand()%(100-10+1)); if(x< 90) { // mach irgendwas } else { goto anfang; //funktion neu starten und aber vorherigen Aufruf beenden }an sonsten mit 'nem rückgabewert:
[code] int navigator() { int x; // generiert Zahlen x= 10 + (rand()%(100-10+1)); if(x< 90) { // mach irgendwas return 0; } else { //funktion neu starten und aber vorherigen Aufruf beenden return 1; } int main (void){ int i; while( navigator()) ; }
-
nachtrag:
wenn Du auf das VOID navigator() gesteigerten wert legst, kannst Du auch 'nen pointer als argument übergeben und so den int wert zurückliefern
-
kleiner anfänger schrieb:
sind sonst läbles 'ne lösung? dann wird zumindest die Rekursion vermieden.
Btw: Die Dinger heißen Labels ;). Ich würde sie hier allerdings nicht benutzen, da sie den Code hier unötig verwirren.
... //funktion neu starten und aber vorherigen Aufruf beenden ... }Das hier ist falsch. Der vorige Aufruf der Funktion wird hier nicht beendet. Du springst einfach nur wieder nach oben.
an sonsten mit 'nem rückgabewert:
[code] int navigator() { int x; // generiert Zahlen x= 10 + (rand()%(100-10+1)); if(x< 90) { // mach irgendwas return 0; } else { //funktion neu starten und aber vorherigen Aufruf beenden return 1; } int main (void){ int i; while( navigator()) ; }So ist das doch schon eher was.
Caipi
-
@kleiner Anfänger: machs doch nicht so kompliziert
!
goto's benutzt eh keiner (fast) mehr und beim 2'ten code
verschwendest du zeit weil du im schlimmsten Falle,mehrmals
aus der Funktion raus und rein springst...void navigator() { int x; do { x = 10 + (rand()%(100-10+1)); } while(x>=90); // mach irgendwas }