Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Errschaffer

Alter Hase

  • »Errschaffer« ist der Autor dieses Themas

Beiträge: 865

Wohnort: Frankfurt

  • Private Nachricht senden

1

16.07.2008, 15:23

Schleife endet nicht (Ich mal wieder)

Hallo, habe wieder ein Problem. :oops:

Bestimmt wieder soein kleiner wie bei meinen anderen Fragen auch aber auch noch 2 Tagen bin ich nicht daruaf gekommen.

Also wie man hier sieht:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
void SpielLeicht ()
{
//Variabeln

int Zufallzahl;
int Raten;
int Versuche=0;



Zufallzahl=(rand()%10)+1;

do
{
cout<<"Sie haben die Spielstufe leicht gewaehlt.Ihnen stehen 5 Versuche zur verfügung"<<endl;
cout<<"Auswahlmöglichkeiten:"<<endl;
cout<<endl;
cout<<endl;
cout<<"[1]Künstler"<<endl;
cout<<"[2]Verkäufer"<<endl;
cout<<"[3]Autohändler"<<endl;
cout<<"[4]Frisour"<<endl;
cout<<"[5]Tischler"<<endl;
cout<<"[6]Schmied"<<endl;
cout<<"[7] Bauer"<<endl;
cout<<"[8]Fischer"<<endl;
cout<<"[9]Elektriker"<<endl;
cout<<"[10]Autor"<<endl;
cout<<"Bitte geben sie die Zahl ein"<<endl;
cin>>Raten;

//Jeweills um 1 pro Durchluaf erhöhen

Versuche++;


//Wurde eine Zhal höher als 10 eigeben?

if (Raten>10)
{
    cout<<"Bitte bleiben sie im angebenen Zahlenraum"<<endl;

}



} while ((Versuche == 5)||(Raten != Zufallzahl)) ;

//Wurde die Zahl erraten?

if (Raten == Zufallzahl)
{
                     cout<<"Sie haben Gewonnen"<<endl;
                    
                     }



//Wurde diese Funktion bearbeitet srpinge wieder zur main Funktion                     

main ();
}


Soll die Schleife ´beendet werden wenn "Versuche" gleich 5 ist,und wieder zur main Funktion springen.
Tuts aber net.

GR-PA

Treue Seele

Beiträge: 326

Wohnort: Daheim

Beruf: Faulenzer

  • Private Nachricht senden

2

16.07.2008, 15:32

Benutze doch einfach mal

C-/C++-Quelltext

1
while(Versuche != 5 && Raten != Zufallszahl);
Signaturen werden überbewertet

3

16.07.2008, 15:37

Die Lösung ist recht einfach zu finden, wenn du dir die Bedingung einmal ausformulierst, unter welcher die fußgesteuerte Schleife (do...while) ausgeführt werden soll:

Führe xyz aus, solange...

Und niemals die main-Funktion aus dem Programm heraus erneut aufrufen.

Grüße... Heiko

Errschaffer

Alter Hase

  • »Errschaffer« ist der Autor dieses Themas

Beiträge: 865

Wohnort: Frankfurt

  • Private Nachricht senden

4

16.07.2008, 16:24

OK Fehler gefunden. Habe das == durch ein <.
Also sollte er die Schleife solange ausführen,solange Versuche kleiner als 5 ist.
Tuts aber net :oops:

Und wenn ich nicht die main() aufrufe wie soll ich sonst wieder zum Hauptmenü kommen?

Nochmal der aktuelle Code:


C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
void SpielLeicht () 
{ 
//Variabeln 

int Zufallzahl; 
int Raten; 
int Versuche=0; 



Zufallzahl=(rand()%10)+1; 

do 
{ 
cout<<"Sie haben die Spielstufe leicht gewaehlt.Ihnen stehen 5 Versuche zur verfügung"<<endl; 
cout<<"Auswahlmöglichkeiten:"<<endl; 
cout<<endl; 
cout<<endl; 
cout<<"[1]Künstler"<<endl; 
cout<<"[2]Verkäufer"<<endl; 
cout<<"[3]Autohändler"<<endl; 
cout<<"[4]Frisour"<<endl; 
cout<<"[5]Tischler"<<endl; 
cout<<"[6]Schmied"<<endl; 
cout<<"[7] Bauer"<<endl; 
cout<<"[8]Fischer"<<endl; 
cout<<"[9]Elektriker"<<endl; 
cout<<"[10]Autor"<<endl; 
cout<<"Bitte geben sie die Zahl ein"<<endl; 
cin>>Raten; 

//Jeweills um 1 pro Durchluaf erhöhen 

Versuche++; 


//Wurde eine Zhal höher als 10 eigeben? 

if (Raten>10) 
{ 
    cout<<"Bitte bleiben sie im angebenen Zahlenraum"<<endl; 

} 



} while ((Versuche < 5)||(Raten != Zufallzahl)) ; 

//Wurde die Zahl erraten? 

if (Raten == Zufallzahl) 
{ 
                     cout<<"Sie haben Gewonnen"<<endl; 
                    
                     } 

else if (Versuche > 5)
{

    cout<<"Sie haben leider Verloren"<<endl;

}


//Wurde diese Funktion bearbeitet srpinge wieder zur main Funktion                      

main (); 
}

Das Gurke

Community-Fossil

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

5

16.07.2008, 16:27

Zitat von »"Errschaffer"«

Und wenn ich nicht die main() aufrufe wie soll ich sonst wieder zum Hauptmenü kommen?
Mach dir ne Mainmenu Funktion ;)

ThePhil

Frischling

Beiträge: 23

Beruf: Schüler

  • Private Nachricht senden

6

16.07.2008, 16:37

Zitat von »"Das Gurke"«

Zitat von »"Errschaffer"«

Und wenn ich nicht die main() aufrufe wie soll ich sonst wieder zum Hauptmenü kommen?
Mach dir ne Mainmenu Funktion ;)


Oder Menü gleich in die main ;)
Noch eine Schleife dazu und fertig :)

7

16.07.2008, 17:31

Dass die Schleife immer noch nicht funktioniert, liegt daran (habe ich zuvor übersehen), dass die Variable "Zufallszahl" nicht initialisiert wurde sondern lediglich deklariert (bekannt gemacht).

C-/C++-Quelltext

1
2
3
4
5
int variable; // Deklaration - variable hat einen undefinierten Wert

variable = 12; // Zuweisung - variable hat nun einen definierten Wert (12)

int andere_variable = 13; // Deklaration und Gleichzeitige Zuweisung

// oder auch

int noch_eine_andere(14); // Ein so genannter Konstruktoraufruf *


*) Was genau ein Konstruktor macht, erfährst du, wenn du mit OOP (Klassen udgl.) anfängst. Im Moment wirkt er sich genauso aus, wie die Zuweisung.

Wenn du eine Funktion aufrufst, dann wird die Programmausführung in dem Kontext fortgesetzt, wo auch die Funktion aufgerufen wurde:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
void funktion()
    {
        std::cout << "Funktion" << std::endl;
    }

int main()
    {
        std::cout << "Vor der Funktion" << std::endl;
        funktion();
        std::cout << "Nach der Funktion" <<std::endl;
    }


Wenn du nun das Menü von Dir immer wieder anzeigen lassen willst, dann packe den Aufruf in eine Schleife, in der du wieder eine Abbruchbedingun o.ä. abprüfst.

C-/C++-Quelltext

1
2
3
do {
    funktion();
} while (solange_wie_noetig);


Grüße... Heiko

EDIT: Typos

Errschaffer

Alter Hase

  • »Errschaffer« ist der Autor dieses Themas

Beiträge: 865

Wohnort: Frankfurt

  • Private Nachricht senden

8

16.07.2008, 19:29

Also ich hoffe ich habe das richtig verstanden. Wenn ja stimmt das aber nicht was du sagst.


Mit dieser Zeile:

C-/C++-Quelltext

1
Zufallzahl=(rand()%10)+1;


Weise ich doch der Varible Zufallzahl einen Wert zu.

Das die Schleife beeendet wird wenn die Zahl erraten wurde funktioniert ja.
Das Problem ist ja das die Schleife nicht endet wenn ich mehr als 5 Versuche gebraucht habe.

9

16.07.2008, 19:38

C-/C++-Quelltext

1
} while ((Versuche < 5)||(Raten != Zufallzahl)) ;


hier sollte es "und" heißen!

also

C-/C++-Quelltext

1
} while ((Versuche < 5)&&(Raten != Zufallzahl)) ;


kannst dir ja selbst überlegen warum ;)
gerade zu faul zu schreiben...

Errschaffer

Alter Hase

  • »Errschaffer« ist der Autor dieses Themas

Beiträge: 865

Wohnort: Frankfurt

  • Private Nachricht senden

10

16.07.2008, 19:50

Jap jetzt funktionierts. Auch wenn mir noch unklar ist wieso.
Aber nicht verraten, das bekomm ich auch alleine raus hehe^^
edit:Jetzt weiss ich Wieso :lol:

DANKE!

Werbeanzeige