minigame: zahlenraten
lima-city → Forum → Programmiersprachen → C/C++ und D
anfang
break
code
dank
einbinden
fehlen
header
hinweis
jackpot
null
pause
problem
programm
rand
raten
start
system
type
vergessen
zahl
-
hi,
ich hab mal folgendes programmiert:
#include <iostream> using namespace std; int main() { int randnum = rand()%100; int guess; cout<<\"Bitte Zahl eingeben: \"; cin>>guess; if (guess < randnum || guess > randnum) { for (int i=guess; i == randnum; i == guess) { if (guess < randnum) { cout<<\"\\nHöher schätzen...\\n\"; } if (guess > randnum) { cout<<\"\\nHöher schätzen...\\n\"; } cout<<\"\\nNochaml schätzen: \"; cin>>guess; } if (guess == randnum) { cout<<\"\\nRichtig!\\n\"; cin.clear(); cin.get(); cin.get(); } }}
ööhm aber nachdem ich eine zahl eingegeben habe wird das programm geschlossen...
ich sehe aber keinen grund warum
kann mir jemand weiterhelfen?
mfg splinto -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
also ich hab normalerweise alle variablen definiert:
int guess
int randnum
int i = guess
Ich glaub er meint das es keine Schleife gibt da der User nochmal eine Zahl eingeben kann, wenn er falsch liegt. ;)
Wobei das hast du mehr oder weniger eh drinnen ;)
@topic:
Ja schau dir dein Programm nochmal genau an.
Da sind einige, ähm, Denkfehler drinnen. ;)
Edit: Noch was: Was soll das n??
Ein Enter macht man mit \"\\n\"
Beitrag geändert: 9.5.2008 16:05:34 von philippkern -
Hab das ganze ein wenig optimiert...
#include <iostream> using namespace std; int main() { srand(time(NULL)); int randnum = rand()%100; int guess; while (guess!=randnum) { cout<<\"\\nNochaml schaetzen: \"; cin>>guess; if (guess < randnum) { cout<<\"\\nHoeher schaetzen...\\n\"; } if (guess > randnum) { cout<<\"\\nNiedriger schaetzen...\\n\"; } } cout<<\"\\nRichtig!\\n\"; cin.clear(); cin.get(); cin.get(); }
-
Hab das ganze ein wenig optimiert...
#include <iostream> using namespace std; int main() { srand(time(NULL)); int randnum = rand()%100; int guess; while (guess!=randnum) { cout<<\"\\nNochaml schaetzen: \"; cin>>guess; if (guess < randnum) { cout<<\"\\nHoeher schaetzen...\\n\"; } if (guess > randnum) { cout<<\"\\nNiedriger schaetzen...\\n\"; } } cout<<\"\\nRichtig!\\n\"; cin.clear(); cin.get(); cin.get(); }
Und was ist wenn ganz unwahrscheinlicherweise der Wert von randnum schon am Anfang auf guess steht? :P
Da wäre besser guess zuerst auf -1 oder so zu setzen, nicht? ;)
Außerdem gibt das bei mir eine Speicherschutzverletzung wenn ich das nicht vorher auf was initialisiere ...
Edit: time: required headers: <time.h>
Beitrag geändert: 9.5.2008 16:23:29 von philippkern -
zitat von philippkern:
Edit: Noch was: Was soll das n??
Ein Enter macht man mit \"\\n\"
- ja also das forum is dran \"schuld\" weil ein backslash nicht angezeigt wird
=> danke an euch es geht...
mfg splinto -
Mit dem initialwert hast du recht, auch wenn er nicht zwingen erfolderlich ist... zumidnest wirft sowas normalerweise keinen Speicherfehler.
Was den Header angeht so brauchte ich ihn in meinem Dev C++ nicht. Aber man kann ihn ja einbinden, wenn er fehlen sollte.
Hier die Version mit dem Startwert, danke für den Hinweis.. ich wusste ich hab was vergessen (:
#include <iostream> using namespace std; int main() { srand(time(NULL)); int randnum = rand()%100; int guess=-1; while (guess!=randnum) { cout<<\"\\nNochaml schaetzen: \"; cin>>guess; if (guess < randnum) { cout<<\"\\nHoeher schaetzen...\\n\"; } if (guess > randnum) { cout<<\"\\nNiedriger schaetzen...\\n\"; } } cout<<\"\\nRichtig!\\n\"; cin.clear(); cin.get(); cin.get(); }
Eine riesengroße Änderung, oder? (:
Edit: pas de Problem (:
Beitrag geändert: 9.5.2008 16:57:46 von adrians -
Oder so, meiner Meinung nach noch schöner:
#include <iostream> using namespace std; int main() { srand(time(NULL)); int guess, randnum = rand()%100; do { cout<<\"\\\\nNochaml schaetzen: \"; cin>>guess; if (guess < randnum) cout<<\"\\\\nHoeher schaetzen...\\\\n\"; else if (guess > randnum) cout<<\"\\\\nNiedriger schaetzen...\\\\n\"; } while(guess!=randnum); cout<<\"\\\\nRichtig!\\\\n\"; cin.get(); cin.get(); return 0; }
Beitrag geändert: 9.5.2008 17:12:23 von kochmarkus -
Mit dem initialwert hast du recht, auch wenn er nicht zwingen erfolderlich ist... zumidnest wirft sowas normalerweise keinen Speicherfehler.
Was den Header angeht so brauchte ich ihn in meinem Dev C++ nicht. Aber man kann ihn ja einbinden, wenn er fehlen sollte.
Hier die Version mit dem Startwert, danke für den Hinweis.. ich wusste ich hab was vergessen (:
#include <iostream> using namespace std; .... }
Eine riesengroße Änderung, oder? (:
Edit: pas de Problem (:
Beitrag geändert: 9.5.2008 16:57:46 von adrians
Also ein Debug Error! der während der Laufzeit der exe gekommen war. Kann jetzt nicht sagen obs ne Speicherzugriffsverletzung war. ;)
Hmm, nja auf jeden Fall hat mein Visul Studio den Header benötigt.
Ja es können die kleinsten Änderungen große Auswirkungen haben.
-
ok danke nochmal für eure hilfe...
wer möcht kann sich die datei runterladen:
http://splinters-hp.pytalhost.com/downloads/HI-LO.exe -
system(\"PAUSE\");
ist eine eher unschöne Lösung. Sie ist nicht plattformunabhängig und generell ein eher ungern gesehenes Element.
Ich rate dringenst davon ab. -
ich schätze mal um system(\"pause\"\') zu verwenden muss ich erstmal <stdlib.h> \"includen\"
Beitrag geändert: 19.5.2008 20:28:36 von splinto -
da ich in letzter zeit nicht sooft hier gucken kann erts jetzt eine antwort:
ok ich wusste nicht, dass das unschön ist
als ich anfangs die andere möglichkeit mit cin.get(); probiert habe, hattte sich das Programm trotzdem immer geschlossen...
ich muss dabei jedenfalls nichts extra importieren -
Das Problem mit dem schließen trotz cin.get() ist schhnell erklärt:
Es könnte sein, dass noch Anschläge im Buffer gespeichert sind. Ein cin.clear() (ich denke es war die Methode) dürfte Abhilfe schaffen. -
bei cpp-dev mit als beispiel geliefert:
#include <iostream> #include <stdlib.h> #include <time.h> using namespace std; void Start (); void GetResults (); int i, j, life, maxrand; char c; void Start () { i = 0; j = 0; life = 0; maxrand = 6; cout << \"Select difficulty mode:\\n\"; // the user has to select a difficutly level cout << \"1 : Easy (0-15)\\n\"; cout << \"2 : Medium (0-30)\\n\"; cout << \"3 : Difficult (0-50)\\n\"; cout << \"or type another key to quit\\n\"; c = 30; cin >> c; // read the user\'s choice cout << \"\\n\"; switch (c) { case \'1\' : maxrand = 15; // the random number will be between 0 and maxrand break; case \'2\' : maxrand = 30; break; case \'3\' : maxrand = 50; break; default : exit(0); break; } life = 5; // number of lifes of the player srand( (unsigned)time( NULL ) ); // init Rand() function j = rand() % maxrand; // j get a random value between 0 and maxrand GetResults(); } void GetResults () { if (life <= 0) // if player has no more life then he lose { cout << \"You lose !\\n\\n\"; Start(); } cout << \"Type a number: \\n\"; cin >> i; // read user\'s number if ((i>maxrand) || (i<0)) // if the user number isn\'t correct, restart { cout << \"Error : Number not between 0 and \\n\" << maxrand; GetResults(); } if (i == j) { cout << \"YOU WIN !\\n\\n\"; // the user found the secret number Start(); } else if (i>j) { cout << \"Too BIG\\n\"; life = life - 1; // -1 to the user\'s \"life\" cout << \"Number of remaining life: \" << life << \"\\n\\n\"; GetResults(); } else if (i<j) { cout << \"Too SMALL\\n\"; life = life - 1; cout << \"Number of remaining life:\\n\" << life << \"\\n\\n\"; GetResults(); } } int main () { cout << \"** Jackpot game **\\n\"; cout << \"The goal of this game is to guess a number. You will be ask to type\\n\"; cout << \"a number (you have 5 guess)\\n\"; cout << \"Jackpot will then tell you if this number is too big of too small compared to the secret number to find\\n\\n\"; Start(); return 0; }
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage