Fragen bezüglich C++

Der chaotische Hauptfaden

Moderatoren: Heaterman, Finger, Sven, TDI, Marsupilami72, duese

Antworten
Benutzeravatar
ange12lo
Beiträge: 522
Registriert: Mo 12. Aug 2013, 22:22

Fragen bezüglich C++

Beitrag von ange12lo »

Hallo Frickler

Ich bin in der Schule gerade am Thema " Strukturiertes Programmieren nach Vorgabe",

leider stehe ich jetzt bei c++ zum teil noch an.

Ich muss ein Ratespiel nach diesen vorgaben schreiben:


Aufgabenstellung
Erstellen Sie eine neue Programmhülse.

Teil 1
Beginnen Sie also mit dem Programmaufbau. Der erste Teil des Programms ist sicher, dass eine Zufallszahl erzeugt wird. Nach der Einleitung soll eine Benutzereingabe mit seiner Schätzung verlangt werden. Am besten packen Sie diese Frage in eine Schleife, wo sie solange gestellt wird, wie die Antwort falsch ist oder wie der Spieler noch Versuche hat.

Am Bildschirm soll dieses Programm so aussehen:
Erraten Sie eine Zahl von 1 bis 30? (5 Versuche)
Versuch > 20
Falsch! Zahl ist hoeher!
Versuch > 24
Falsch! Zahl ist hoeher!
Versuch > 27
Falsch! Zahl ist tiefer!
Versuch > 25
Richtig! Sie haben die Zahl erraten, gratuliere!


leider stehe ich noch an der Zufallszahl an.
wie ich die schleife beende wen der Spieler die richtige Zahl eingegeben hat ist mir auch noch nicht ganz klar.

mein Code:

Code: Alles auswählen


#include <iostream>
using namespace std;

int main ()
{

int Zahleingabe =0;
int random =0;
int Zaehler =0;

cout<< "Du hast 5 Versuche. Ich merke mir eine Zahl zwischen 1 und 30 " <<endl;
cin>> Zahleingabe;


while (Zaehler <= 5)
{

	
	if (Zahleingabe!= random)
{
	cout << " Richtig! Sie haben die Zahl mit "<< Zaehler <<" erraten, gratuliere!" <<endl;
	
	
}

else

{
	if (Zahleingabe < random)
	{
		cout<< " Falsch! Zahl ist hoeher! " <<endl;
	}
	else
	{
		cout<< "Falsch! Zahl ist tiefer!" <<endl;
		
	}
	
	
}

Zaehler ++;	

}

cout<< " Schade sie haben leider verloren" <<endl;









    return 0;                             

	
	
	
	
	
	
	
	
	
	

}
ich bedanke mich im voraus :)
Benutzeravatar
Fritzler
Beiträge: 12600
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: Fragen bezüglich C++

Beitrag von Fritzler »

Dein Lehrer mag Schachtelsätze oder?
Musste das 3 mal lesen bevor ich das verstanden habe...

Zufallszahl:
Guck dir rand() und srand() an.

Aus der Schleife springste raus indem du zB dein Zaehler auf 100 setzt oer mit einem break;

Das schade sie haben verloren darf dann natürlich nur kommen wenn der Zähler kleiner 100 ist.

Und hier is offensichtlich ein Fehler:
if (Zahleingabe!= random)
{
cout << " Richtig! Sie haben die Zahl mit "<< Zaehler <<" erraten, gratuliere!" <<endl;
Benutzeravatar
xoexlepox
Beiträge: 4815
Registriert: So 11. Aug 2013, 19:28
Wohnort: So etwa in der Mitte

Re: Fragen bezüglich C++

Beitrag von xoexlepox »

ange12lo hat geschrieben:leider stehe ich noch an der Zufallszahl an.
Wie Fritzler schon bemerkte: Schau dir "srand()" (-> "gerne genommen" wird z.B. "srand( time( NULL ) )" ;) ) und "rand()" an. Die Einschränkung auf einen bestimmten Wertebereich erfolgt am einfachsten mittels des "%"-Operators. Damit beeinflusst du zwar die Gleichverteilung ein wenig, aber in dem vorliegendem Projekt sollte das nichts ausmachen. Bei einem Crypto-Algorithmus sieht das schon anders aus ;)
ange12lo hat geschrieben:wie ich die schleife beende wen der Spieler die richtige Zahl eingegeben hat ist mir auch noch nicht ganz klar.
Ich sehe da mindestens zwei (brauchbare) Möglichkeiten:

Einen "Ausstieg" aus der Schleife mittels "break". Dann ist es jedoch nach der Schleife notwendig zu prüfen, ob die Schleife abgebrochen wurde, oder "zuende gelaufen" ist.

Durch eine modifizierte "Laufbedingung" -> Definiere dir z.B. eine Variable "geloest", die gesetzt wird, wenn die Lösung gefunden wurde, und baue diese mit in die Laufbedingung (mit einem "&&") ein.

Die Modifikation des Laufindex ist zwar "logisch ok", nur früher gab es bei solchen "Tricks" schon mal Probleme mit einem bei der Kompilierung ggf. angewendeten "Optimizer" -> Ein fast nicht zu findender Fehler, der in der "Debug"-Version natürlich nicht auftritt. Ich habe keine Ahnung, ob die heutigen Optimizer solche "Schweinereien" entdecken und honorieren...

Die "Hacker-Variante" wäre ein "exit( 0 )" innerhalb der Schleife, wenn der Wert erraten wurde :evil: Aber dein Lehrer wird dir wohl den Hals umdrehen, wenn du sowas anwendest -> Das ist nicht der Stil, den du lernen sollst.

PS: Was mir noch aufgefallen ist, daß die Schleife mindestens einmal durchlaufen werden muss. Daher ergibt sich auch die Möglichkeit, die Schleife mit "do" zu beginnen, und das "while" am Ende einzubauen. Aber diese "Feinheiten" werden dir vermutlich erst später gelehrt, und sind momentan eher verwirrend ;)
Benutzeravatar
ange12lo
Beiträge: 522
Registriert: Mo 12. Aug 2013, 22:22

Re: Fragen bezüglich C++

Beitrag von ange12lo »

Hallo ich hab übern die rand funktion gegogelt doch leider sind die meisten Antworten für mich unverstäntlich.

was wird benötigt? Ich nehme an für die zeit brauchts #include <windows.h>
wo schreib ich die rand hin, in die schleife?
Simon
Beiträge: 207
Registriert: Mo 12. Aug 2013, 17:17

Re: Fragen bezüglich C++

Beitrag von Simon »

Nur mal so als kleine Anmerkung, und nicht böse gemeint: Ich glaube Du gehts an das Problem völlig falsch heran. Einfach drauf los zu programmieren und nach Befehlen zu fragen wird mit Sicherheit nicht zum Erfolg führen. Unabhängig der Programmiersprache scheinst Du die eigentliche Problematik garnicht verstanden zu haben. Du fragst nach "welchen Befehl nehme ich für den Abbruch" wenn Du noch garnicht verstanden hast wann und wie überhaupt abgebrochen werden soll. Du solltest Dich vielleicht erst einmal hinsetzen und Dir völlig unabhängig von der eigentlichen Programmierung einen Programmablauf aufmalen. So nach dem Motto Schritt 1 Zufallszahl genereieren, Schritt 2 Bunutzereingabe "Gebe Zahl ein", Schritt 3 Vergleich Eingabe <> Zufallszahl usw. Ich werfe nur mal das Wort "PAP" in den Raum. Die eigentliche Übersetzung des Programmablaufs in C++ Zeilen ist dann ein vielfaches einfacher. Solange Du garnicht verstanden hast was das Programm wie machen muß wirst Du auch mit ein Paar Zeilen C++ nicht weiter kommen.

Gruß

Simon
Benutzeravatar
xoexlepox
Beiträge: 4815
Registriert: So 11. Aug 2013, 19:28
Wohnort: So etwa in der Mitte

Re: Fragen bezüglich C++

Beitrag von xoexlepox »

ange12lo hat geschrieben:Hallo ich hab übern die rand funktion gegogelt doch leider sind die meisten Antworten für mich unverstäntlich.
Dann schau mal hier. Dort steht z.B. auch daß du dafür "stdlib.h" benötigst.
ange12lo hat geschrieben:was wird benötigt? Ich nehme an für die zeit brauchts #include <windows.h>
Nö, laut dem hier brauchst du "time.h". Mag sein daß das bei Windoof anders ist ;) Mit welchem Lehrmaterial arbeitet ihr eigentlich?
ange12lo hat geschrieben:wo schreib ich die rand hin, in die schleife?
Dort, wo du die Zufallszahl erzeugen möchtest? "srand()" irgendwo am Anfang, ohne dem gehts auch, nur dann bekommst du immer wieder die gleiche Zahlenfolge.
Name vergessen
Beiträge: 3261
Registriert: Mo 12. Aug 2013, 19:47

Re: Fragen bezüglich C++

Beitrag von Name vergessen »

Irgendwie klingt für mich die Aufgabe gar nicht nach Code, sondern nach einem Struktogramm... dann stellen sich diese ganzen Fragen nämlich gar nicht. Es würde mich auch wundern, wenn die Lehrmaterialien die benötigten Bibliotheken und Befehle nicht vor der Aufgabe erklären würden, das wäre dann sehr schlechtes Lehrmaterial. Lustiges Befehle-suchen wird man zwar irgendwann auch lernen müssen, aber das ist doch eher eine Einsteigeraufgabe, wo das nicht nötig sein darf.

Evtl. will hier jemand erstmal C-Code schreiben und dann mittels Struktogramm-Compiler zurückwandeln? ;) Das ist zwar nicht der richtige Weg, besonders nicht für "structured programming", aber IMO dann OK, wenn man das generierte Struktogramm dann so stark editiert, daß es aussieht, als sei es vor dem Programmieren entstanden. Dann lernt man nämlich ähnlich viel, und der Dozent merkt es nicht. :) Ob man allerdings Zeit spart, bezweifle ich.
Benutzeravatar
ange12lo
Beiträge: 522
Registriert: Mo 12. Aug 2013, 22:22

Re: Fragen bezüglich C++

Beitrag von ange12lo »

Ich habe mein Spiel erweitert.
leider hab ich noch ein Problem in der ersten do schleife. wen der Spieler eine Falsch Eingabe tätigt springt der switch auf default.
und soll wieder nach oben springen. leider wird die do Schleife einfach übersprungen.

Code: Alles auswählen

#include <iostream>
#include <windows.h>
#include <time.h>
#include <string>

using namespace std;

int main ()
{
	
int Zahleingabe =0;
int random =0;
int Zaehler =0;
int Zaehler1 =0;
int zaehlerschleiffe =0;
int grad =0;
int Case =0;
char level ;



srand (time(NULL));

cout<< "Wir spielen ein Spiel. Ich merke mir eine Zahl und du musst sie rausfinden"<<"\n" <<endl;
cout<< "Welchen Schwierigkeitsgrad moechten du denn gerne?" << "\n"<<endl;
cout<< "a) Easy		(Bereich: 1-20, 5 Versuche)"  << "\n"<< endl;
cout<< "b) Medium	(Bereich: 1-30, 4 Versuche)"  << "\n"<< endl;
cout<< "c) Hard		(Bereich: 1-40, 3 Versuche)"  << "\n"<< endl;
cin>> level;



do{

switch (level)
{




case ('a'):


	
cout << "\n"<< " Du hast Easy Gewaehlt. Bereich von 1-20 und 5 Versuche. viel Glueck "<<"\n" <<endl;
	grad += 20;
	Zaehler1 += 4;
	zaehlerschleiffe += 4;
	Case++;
	break;
	


case ('b'):


	
cout << "\n"<< " Du hast Medium Gewaehlt. Bereich von 1-30 und 4 Versuche. viel Glueck "<<"\n" <<endl;
	grad += 30;
	Zaehler1 += 3;
	zaehlerschleiffe += 3;
	Case++;
	break;
	


case ('c'):


	
cout << "\n"<< " Du hast Hard Gewaehlt. Bereich von 1-40 und 3 Versuche. viel Glueck "<<"\n" <<endl;
	grad += 40;
	Zaehler1 += 3;
	zaehlerschleiffe += 3;
	Case++;
	
	break;
	
default :
	cout<<"\n"<<"Falsche Eingabe nur a,b,c waehlen"<<endl;
	

}
	

}while (Case > 1);




do{
cout<<"Gib deine Zahl ein "<<endl;
	
	
cin>> Zahleingabe;
	
	if (Zahleingabe == random)
	
	{
		cout << " Richtig! Du hast die Zahl erraten, gratuliere!" <<endl;
	break; 
			
	}



else 

{
	if (Zahleingabe < random)
	{
		cout<< "-----------------------------------------------------------------"<<endl;
		cout<< " Falsch! Zahl ist hoeher! "<< "\n"<< "\n"<<endl;
		}
	
	
	else
	
	{
		cout<< "-----------------------------------------------------------------"<<endl;
		cout<< "Falsch! Zahl ist tiefer!" << "\n"<< "\n"<<endl;
		
	}
	
	
	if (Zaehler1 > 1)
	
	{
		cout<<"\n"<< " du hast noch "<< Zaehler1 <<"  versuche" <<endl;
	Zaehler1 --;
		}
		
		else
		
		{
			cout<<"\n"<< "Das ist dein letzter versuch" <<endl;
	Zaehler1 --;
		}
		
		
	Zaehler++;
	
	cout<<"\n" <<endl;
	
} 
}while (Zaehler <= zaehlerschleiffe);



 if (Zahleingabe == random)
 {
 	
 	
 	
 }
 
 
 else
	  {
	  	cout<< "\n" <<" Schade du hast leider verloren. versuchs noch einmal :) " <<endl;
	
	cout<< "\n" <<" Die Zahl war " << random <<endl;
	  	
	cout<< "\n" <<" Made by Angelo Stracuzzi " << random <<endl;
	  	
	  	
	  	
	  }
	
	



	
	
	return 0;
}
Benutzeravatar
flogerass
Beiträge: 1145
Registriert: Mo 12. Aug 2013, 17:46
Wohnort: Nord-Östlich von Ulm

Re: Fragen bezüglich C++

Beitrag von flogerass »

Da steht doch auch

Code: Alles auswählen

while (Case > 1);
Was soll er deiner Meinung nach tun, wenn Case = 0 ist?

Edit: Kannst du bitte deine Zeilen entsprechend der Klammerstruktur einrücken. So kann das, trotz einfacher Struktur, keine Sau lesen.
Edit2: Und mach die ganze Leerzeilen raus. Die Geschweiften Klammern gehören zum if, else, do
Edit3: Die Geschweifte Klammer gehört unter das do.

Edit4: So gehört das:

Code: Alles auswählen

#include <iostream>
#include <windows.h>
#include <time.h>
#include <string>

using namespace std;

int main ()
{
   int Zahleingabe =0;
   int random =0;
   int Zaehler =0;
   int Zaehler1 =0;
   int zaehlerschleiffe =0;
   int grad =0;
   int Case =0;
   char level ;

   srand (time(NULL));

   cout<< "Wir spielen ein Spiel. Ich merke mir eine Zahl und du musst sie rausfinden"<<"\n" <<endl;
   cout<< "Welchen Schwierigkeitsgrad moechten du denn gerne?" << "\n"<<endl;
   cout<< "a) Easy      (Bereich: 1-20, 5 Versuche)"  << "\n"<< endl;
   cout<< "b) Medium   (Bereich: 1-30, 4 Versuche)"  << "\n"<< endl;
   cout<< "c) Hard      (Bereich: 1-40, 3 Versuche)"  << "\n"<< endl;
   cin>> level;

   do
   {
      switch (level)
      {
         case ('a'):
            cout << "\n"<< " Du hast Easy Gewaehlt. Bereich von 1-20 und 5 Versuche. viel Glueck "<<"\n" <<endl;
            grad += 20;
            Zaehler1 += 4;
            zaehlerschleiffe += 4;
            Case++;
         break;

         case ('b'):
            cout << "\n"<< " Du hast Medium Gewaehlt. Bereich von 1-30 und 4 Versuche. viel Glueck "<<"\n" <<endl;
            grad += 30;
            Zaehler1 += 3;
            zaehlerschleiffe += 3;
            Case++;
         break;
   
         case ('c'):
            cout << "\n"<< " Du hast Hard Gewaehlt. Bereich von 1-40 und 3 Versuche. viel Glueck "<<"\n" <<endl;
            grad += 40;
            Zaehler1 += 3;
            zaehlerschleiffe += 3;
         break;
   
         default :
            cout<<"\n"<<"Falsche Eingabe nur a,b,c waehlen"<<endl;
      }
   }while (Case > 1);

...
   return 0;
}
Benutzeravatar
ange12lo
Beiträge: 522
Registriert: Mo 12. Aug 2013, 22:22

Re: Fragen bezüglich C++

Beitrag von ange12lo »

Case =0 er muss die do schleife solang wiederholen bis Case grösser 1 ist.
Benutzeravatar
flogerass
Beiträge: 1145
Registriert: Mo 12. Aug 2013, 17:46
Wohnort: Nord-Östlich von Ulm

Re: Fragen bezüglich C++

Beitrag von flogerass »

Bist du des englischen mächtig?
while = während
Da steht also
Tu es
{
}während( Case >1 )

Edit: Dann stellt sich natürlich noch die Frage, warum man die Eingabe zweimal machen soll.
Edit2: Beim letzten Fall fehlt übrigens noch ein Case++. Was mir auch noch nicht ganz einleuchtet ist, warum du die Werte mit += erhöhst und nicht einfach zuweist. In deinem Fall steht da vorher 0 drin. Aber was wenn nicht?
Benutzeravatar
ange12lo
Beiträge: 522
Registriert: Mo 12. Aug 2013, 22:22

Re: Fragen bezüglich C++

Beitrag von ange12lo »

die Eingabe muss nur wiederholt werden wen der user eine Falsche Eingabe gemacht hat. wie kann man es besser lösen?
Benutzeravatar
xoexlepox
Beiträge: 4815
Registriert: So 11. Aug 2013, 19:28
Wohnort: So etwa in der Mitte

Re: Fragen bezüglich C++

Beitrag von xoexlepox »

ange12lo hat geschrieben:und soll wieder nach oben springen.

Dazu fehlt auch eine Schleife im Stil "do/while 'eingabe != korrekt' ". Wie wäre es mit einer Variablen (z.B. namens 'input_ok'), die am Anfang der Abfrageschleife auf 0 gesetzt wird, und nur bei einer korrekten Eingabe (->case) auf 1 gesetzt wird (bei "default" eben nicht)? Ausserdem vermisse ich die Zuweisung von "random".

PS: Deine Spielregeln sind "echt gesittet", denn bei bei 5 Versuchen und 32 Möglichkeiten findet ein logisch denkender Mensch immer die Lösung -> rechne mal nach... ;)
Benutzeravatar
flogerass
Beiträge: 1145
Registriert: Mo 12. Aug 2013, 17:46
Wohnort: Nord-Östlich von Ulm

Re: Fragen bezüglich C++

Beitrag von flogerass »

Genau so wie du es gedacht hast. Nur halt richtig

Code: Alles auswählen

   gutewahl= 0; //würde ich immer vor der Schleife auf 0 setzen
   do
   {
      switch (level)
      {
         case ('a'):
            cout << "\n"<< " Du hast Easy Gewaehlt. Bereich von 1-20 und 5 Versuche. viel Glueck "<<"\n" <<endl;
            grad = 20; // Setzen nicht inkrementieren!
            Zaehler1 = 4;
            zaehlerschleiffe = 4;
            gutewahl = 1; //Auf einen fixen Wert setzen
         break;

      ...
         default :
            cout<<"\n"<<"Falsche Eingabe nur a,b,c waehlen"<<endl;
      }
   }while (gutewahl ==0);
Edit: Zwei Dumme ein Gedanke
Edit2: Du solltest dein level innerhalb der Schleife setzen! Sonst kommst du bei einer Falscheingabe nie wieder raus!
Zuletzt geändert von flogerass am Sa 28. Sep 2013, 17:00, insgesamt 1-mal geändert.
Benutzeravatar
ange12lo
Beiträge: 522
Registriert: Mo 12. Aug 2013, 22:22

Re: Fragen bezüglich C++

Beitrag von ange12lo »

xoexlepox hat geschrieben:
ange12lo hat geschrieben:und soll wieder nach oben springen.

Dazu fehlt auch eine Schleife im Stil "do/while 'eingabe != korrekt' ". Wie wäre es mit einer Variablen (z.B. namens 'input_ok'), die am Anfang der Abfrageschleife auf 0 gesetzt wird, und nur bei einer korrekten Eingabe (->case) auf 1 gesetzt wird (bei "default" eben nicht)? Ausserdem vermisse ich die Zuweisung von "random".

PS: Deine Spielregeln sind "echt gesittet", denn bei bei 5 Versuchen und 32 Möglichkeiten findet ein logisch denkender Mensch immer die Lösung -> rechne mal nach... ;)
Hab es mal ergänzt.

Code: Alles auswählen

do{
	
	cin>> level;

switch (level)
{





case ('a'):


	
cout << "\n"<< " Du hast Easy Gewaehlt. Bereich von 1-20 und 5 Versuche. viel Glueck "<<"\n" <<endl;
	grad += 20;
	Zaehler1 += 4;
	zaehlerschleiffe += 4;
	input_ok++;
	break;
	


case ('b'):


	
cout << "\n"<< " Du hast Medium Gewaehlt. Bereich von 1-30 und 4 Versuche. viel Glueck "<<"\n" <<endl;
	grad += 30;
	Zaehler1 += 3;
	zaehlerschleiffe += 3;
	input_ok++;
	break;
	


case ('c'):


	
cout << "\n"<< " Du hast Hard Gewaehlt. Bereich von 1-40 und 3 Versuche. viel Glueck "<<"\n" <<endl;
	grad += 40;
	Zaehler1 += 3;
	zaehlerschleiffe += 3;
	input_ok++;
	
	break;
	
default :
	cout<<"\n"<<"Falsche Eingabe nur a,b,c waehlen. Eingabe wiederholen"<<endl;
	}
	

}while (input_ok != 1);

Benutzeravatar
flogerass
Beiträge: 1145
Registriert: Mo 12. Aug 2013, 17:46
Wohnort: Nord-Östlich von Ulm

Re: Fragen bezüglich C++

Beitrag von flogerass »

Ein while auf != abzufragen wenn die Variable inkrementiert wird (warum auch immer du das so machst) ist gerährlich!
Nicht Gleich ist sie nämlich dann genau einmal. Und dann erst wieder wenn die Variable überläuft.
Benutzeravatar
ange12lo
Beiträge: 522
Registriert: Mo 12. Aug 2013, 22:22

Re: Fragen bezüglich C++

Beitrag von ange12lo »

flogerass hat geschrieben:Ein while auf != abzufragen wenn die Variable inkrementiert wird (warum auch immer du das so machst) ist gerährlich!
Nicht Gleich ist sie nämlich dann genau einmal. Und dann erst wieder wenn die Variable überläuft.
Hast recht so Spiel überarbeitet.

Code: Alles auswählen

#include <iostream>
#include <windows.h>
#include <time.h>
#include <string>

using namespace std;

int main ()
{
	
int Zahleingabe =0;
int random =0;
int Zaehler =0;
int Zaehler1 =0;
int zaehlerschleiffe =0;
int grad =0;
int input_ok =0;
char level ;



srand (time(NULL));

cout<< "Wir spielen ein Spiel. Ich merke mir eine Zahl und du musst sie rausfinden"<<"\n" <<endl;
cout<< "Welchen Schwierigkeitsgrad moechten du denn gerne?" << "\n"<<endl;
cout<< "a) Easy		(Bereich: 1-20, 5 Versuche)"  << "\n"<< endl;
cout<< "b) Medium	(Bereich: 1-30, 4 Versuche)"  << "\n"<< endl;
cout<< "c) Hard		(Bereich: 1-40, 3 Versuche)"  << "\n"<< endl;




do{
	
	cin>> level;

switch (level)
{





case ('a'):


	
cout << "\n"<< " Du hast Easy Gewaehlt. Bereich von 1-20 und 5 Versuche. viel Glueck "<<"\n" <<endl;
	grad += 20;
	Zaehler1 += 4;
	zaehlerschleiffe += 4;
	input_ok++;
	break;
	


case ('b'):


	
cout << "\n"<< " Du hast Medium Gewaehlt. Bereich von 1-30 und 4 Versuche. viel Glueck "<<"\n" <<endl;
	grad += 30;
	Zaehler1 += 3;
	zaehlerschleiffe += 3;
	input_ok++;
	break;
	


case ('c'):


	
cout << "\n"<< " Du hast Hard Gewaehlt. Bereich von 1-40 und 3 Versuche. viel Glueck "<<"\n" <<endl;
	grad += 40;
	Zaehler1 += 3;
	zaehlerschleiffe += 3;
	input_ok++;
	
	break;
	
default :
	cout<<"\n"<<"Falsche Eingabe nur a,b,c waehlen. Eingabe wiederholen"<<endl;
	}
	

}while (input_ok = 1);


random = rand() % grad  + 1;

do{
	
	
cout<<"Gib deine Zahl ein "<<endl;
	
	
cin>> Zahleingabe;
	
	if (Zahleingabe == random)
	
	{
		cout << " Richtig! Du hast die Zahl erraten, gratuliere!" <<endl;
	break; 
			
	}



else 

{
	if (Zahleingabe < random)
	{
		cout<< "-----------------------------------------------------------------"<<endl;
		cout<< " Falsch! Zahl ist hoeher! "<< "\n"<< "\n"<<endl;
		}
	
	
	else
	
	{
		cout<< "-----------------------------------------------------------------"<<endl;
		cout<< "Falsch! Zahl ist tiefer!" << "\n"<< "\n"<<endl;
		
	}
	
	
	if (Zaehler1 > 1)
	
	{
		cout<<"\n"<< " du hast noch "<< Zaehler1 <<"  versuche" <<endl;
	Zaehler1 --;
		}
		
		else
		
		{
			cout<<"\n"<< "Das ist dein letzter versuch" <<endl;
	Zaehler1 --;
		}
		
		
	Zaehler++;
	
	cout<<"\n" <<endl;
	} 
}while (Zaehler <= zaehlerschleiffe);



 if (Zahleingabe == random)
 {
 	
 	
 	
 }
 
 
 else
	  {
	  	cout<< "\n" <<" Schade du hast leider verloren. versuchs noch einmal :) " <<endl;
	
	cout<< "\n" <<" Die Zahl war " << random <<endl;
	  	
	cout<< "\n" <<" Made by Angelo Stracuzzi " << random <<endl;
	  	
	  	
	  	
	  }
	
	



	
	
	return 0;
}
Benutzeravatar
flogerass
Beiträge: 1145
Registriert: Mo 12. Aug 2013, 17:46
Wohnort: Nord-Östlich von Ulm

Re: Fragen bezüglich C++

Beitrag von flogerass »

Also:
1. Wenn dann while (input_ok == 0)
2. Warum addierst und inkrementierst du immer anstatt die Werte zuzuweisen? Die Frage stell ich dir jetzt zum dritten mal.
3. Werde ich in Zukunft deine Listings erst wieder lesen, wenn sie lesbar sind.
Benutzeravatar
ange12lo
Beiträge: 522
Registriert: Mo 12. Aug 2013, 22:22

Re: Fragen bezüglich C++

Beitrag von ange12lo »

flogerass hat geschrieben:Also:
1. Wenn dann while (input_ok == 0)
2. Warum addierst und inkrementierst du immer anstatt die Werte zuzuweisen? Die Frage stell ich dir jetzt zum dritten mal.
3. Werde ich in Zukunft deine Listings erst wieder lesen, wenn sie lesbar sind.

wenn ich == mache funktioniertes bei einer falsch Eingabe nicht, dann wird die do schleife einfach nur durchlaufen.
Benutzeravatar
flogerass
Beiträge: 1145
Registriert: Mo 12. Aug 2013, 17:46
Wohnort: Nord-Östlich von Ulm

Re: Fragen bezüglich C++

Beitrag von flogerass »

War das nicht sinn der Sache?
Bei Falscheingabe läuft die Schleife von vorne los und bei richtiger Eingabe wird sie beendet.
Benutzeravatar
ange12lo
Beiträge: 522
Registriert: Mo 12. Aug 2013, 22:22

Re: Fragen bezüglich C++

Beitrag von ange12lo »

Bei einer Falscheingabe soll das Programm wider zur do Schlaufe hinaufspringen, dass solange bis man entweder a oder b oder c eingegeben hat. Wenn ich jetzt ein = mache funktioniert das ganze, wenn ich zwei == mache geht das programm troz der falscheingabe aus der ersten do schleife raus.
Benutzeravatar
flogerass
Beiträge: 1145
Registriert: Mo 12. Aug 2013, 17:46
Wohnort: Nord-Östlich von Ulm

Re: Fragen bezüglich C++

Beitrag von flogerass »

Wo machst du == ?
Wenn du in das while ein = schreibst, dann funktionier es garantiert nicht weil das eine Zuweisung ist.
Abgesehen davon könntest du dir das do sparen und das while oben hin schreiben. Aber das sollte am eigentlichen Problem nichts ändern.
Krieg ich eigetentlich noch eine Antwort auf meine Frage, warum dun deine Werte addierst/inkrementiers und nicht zuweist?
Das sind so Dinge, die du anders als üblich machst, dass du entweder gute Gründe dafür haben solltest, oder es entsprechend ändern solltest.
In meinen Augen ist das nämlich sinnlos.
Benutzeravatar
ange12lo
Beiträge: 522
Registriert: Mo 12. Aug 2013, 22:22

Re: Fragen bezüglich C++

Beitrag von ange12lo »

flogerass hat geschrieben:Wo machst du == ?
Wenn du in das while ein = schreibst, dann funktionier es garantiert nicht weil das eine Zuweisung ist.
Abgesehen davon könntest du dir das do sparen und das while oben hin schreiben. Aber das sollte am eigentlichen Problem nichts ändern.
Krieg ich eigetentlich noch eine Antwort auf meine Frage, warum dun deine Werte addierst/inkrementiers und nicht zuweist?
Das sind so Dinge, die du anders als üblich machst, dass du entweder gute Gründe dafür haben solltest, oder es entsprechend ändern solltest.
In meinen Augen ist das nämlich sinnlos.
ich weis nicht was du mit wert addiers/inkrementierst meinst. Meinst du den wert input_ok ? an stelle von input_ok++ soll ich z.b den wert zuweisen? ich mach dass so : while (input_ok = 1); wenn ich es mit den zwei == schreibe so: }while (input_ok == 1); stürzt das Programm ab, aber mit einem gleich funktioniert es Perfekt.
Benutzeravatar
flogerass
Beiträge: 1145
Registriert: Mo 12. Aug 2013, 17:46
Wohnort: Nord-Östlich von Ulm

Re: Fragen bezüglich C++

Beitrag von flogerass »

ange12lo hat geschrieben:ich weis nicht was du mit wert addiers/inkrementierst meinst.
dasda:

Code: Alles auswählen

   grad += 20;
   Zaehler1 += 4;
   zaehlerschleiffe += 4;
   input_ok++;
Sollte so aussehen:

Code: Alles auswählen

   grad = 20;
   Zaehler1 = 4;
   zaehlerschleiffe = 4;
   input_ok = 1;
Das hab ich aber in meinem zweiten Post schon geschrieben und kommentiert.
ange12lo hat geschrieben:an stelle von input_ok++ soll ich z.b den wert zuweisen?
Ja, logisch. Du willst ja nichts zählen. Sondern mitteilen, dass du an dieser Stelle vorbei gekommen bist.
ange12lo hat geschrieben:ich mach dass so : while (input_ok = 1);
Das kann nicht funktionieren. Das Ergebnis wäre immer 1 weil das eine Zuweisung ist. Dein Programm wäre in ener Endlosschleife gefangen.
ange12lo hat geschrieben:wenn ich es mit den zwei == schreibe so: }while (input_ok == 1); stürzt das Programm ab
Definiere abstürzen.

EDIT: Das muss auch }while (input_ok == 0); heißen!

Vielleicht solltest du dein Programm mal optisch etwas strukturierter gestalten. Ich würde mich beim Programmieren mit deiner Formatierung auch nicht zurechtfinden.
andreas6
Beiträge: 4157
Registriert: So 11. Aug 2013, 15:09

Re: Fragen bezüglich C++

Beitrag von andreas6 »

Hallo,

kleiner Tip an den ratlosen Programmierer: Lade Dir hier mal alle Teile eines Lehrbuchs als einzelne Pdfs herunter und studiere es. Dann kommst Du vermutlich besser klar.

MfG. Andreas
Benutzeravatar
xoexlepox
Beiträge: 4815
Registriert: So 11. Aug 2013, 19:28
Wohnort: So etwa in der Mitte

Re: Fragen bezüglich C++

Beitrag von xoexlepox »

ange12lo hat geschrieben:ich mach dass so : while (input_ok = 1);
Das ist eine der ganz beliebten "C"-Fallen, in die jeder irgendwann mal tritt! "input_ok = 1" ist eine Zuweisung, und kein Vergleich (wie z.B. "input_ok == 1"). Ein Vergleich hat immer ein boolsches Ergebnis, eine Zuweisung liefert m.E. immer das Ergebnis von "!= 0", d.h. die Schleife wird nie beendet. Eigentlich müsste der Compiler an dieser Stelle schon "heftig meckern".
Benutzeravatar
tixiv
Beiträge: 128
Registriert: Di 13. Aug 2013, 13:54
Wohnort: Gelsenkirchen

Re: Fragen bezüglich C++

Beitrag von tixiv »

Das gab's doch als Beispiel schon in dem C64-Handbuch in Basic:

http://www.lemon64.com/manual/manual/5_6.html
Benutzeravatar
flogerass
Beiträge: 1145
Registriert: Mo 12. Aug 2013, 17:46
Wohnort: Nord-Östlich von Ulm

Re: Fragen bezüglich C++

Beitrag von flogerass »

xoexlepox hat geschrieben:eine Zuweisung liefert m.E. immer das Ergebnis von "!= 0"
Außer du weist 0 zu. Der Wert einer Zusweisung ist immer gleich der zugwiesenen Zahl.
Deshalb kann man ja auch x=y=z=6 schreiben.
Es gibt ja auch das pre- und postincrement.

Code: Alles auswählen

x = y = 5
a = x++   //a=5
b = ++y   //b=6
Antworten