c++ Zahlenraten Hilfe Dringend

01/25/2013 23:00 Dromerace#1
Hey Leute, ich bräuchte von Euch hilfe für mein "Projekt".
undzwar hab ich ein Zahlenraten Programm geschrieben, da ich jedoch noch komplettter Neuling in dem Bereich c++ bin, sind mir ein paar Fehler unterlaufen. Wenn ich anstatt einer Zahl einen Buchstabe eingebe, zerschießt es mein Programm sprichwörtlich.

könntet ihr mir da vielleicht unter die arme greifen?

ich benutze Microsoft Visual C++ 2010 Express
01/25/2013 23:59 snow#2
1) Lass das goto Zeugs weg und nimm Schleifen und Funktionen

2) Keine Ahnung, wie man das elegant mit iostream lösen kann, aber scanf("%d", &number); sollte klappen.
Bitte achte dabei darauf, dass du die Referenz der Variablen übergeben musst, nicht die Variable selbst.
iostream: std::cin >> eingabe // Variable
stdio: scanf("%d", &eingabe) // & = Referenz, hier wird die Adresse übergeben, in die der Wert geschrieben werden soll.
01/26/2013 00:24 nkkk#3
du kannst mit
Code:
if(!std::cin)
testen ob es eine gültige eingabe war, und gegebenefalls mit
Code:
std::cin.clear();
std::cin.ignore(1000,'\n');
die eingabe resetten.

Aber versuch wirklich erstmal dein code zu verbessern du hast da ca 4 mal den sleben code der sich nur durch eine zahl unterscheidet.
01/26/2013 00:35 +Yazzn#4
Code:
std::string input;
std::cin >> input;
int guessedNumber = stoi(input);
01/26/2013 15:41 Dromerace#5
@snow911
Hab dein Ratschlag beherzigt, hab (fast)keine goto mehr drinnen,
Aber ich bin noch n totaler Anfänger auf dem Gebiet, und blick echt net was ihr damit meint oder wo ich das einfügen sollte =(

Neuer Code:
01/26/2013 16:17 snow#6
Das sieht ohne goto doch schon gleich viel besser aus.
Noch ein Tipp: Du hast für Versuche_20, Versuche_15 etc. immer so gut wie den selben Code.
Mach doch eine Methode, der du einen Integer mit der Zahl der Versuche übergibst.
Das sieht dann so aus:
switch(Anfang)
{
case('a'):
Versuche(10000);
case('b'):
Versuche(10);
etc.

Zum Einlesen: Die Methode von Yazzn könnte klappen. Du musst halt immer dort, wo du etwas einliest, das falsch interpretiert werden könnte (String bei Integer etc.), diese Konvertierung vornehmen. Dabei wird ein String als Integer interpretiert.

z.B:

string input;
std::cout << "Hoechste Zahl?" << std::endl;
std::cin >> input;
limit = std::stoi(input);
01/26/2013 16:30 Dromerace#7
Habs so gemacht, wie Yazzn gesagt hat, bekkome ne derbe Fehlermeldung :O

Ich sollte vlt erwähnen, dass ich ne Konsolenanwendung mache
01/26/2013 16:50 snow#8
Hast du denn #include <string> bedacht?
01/26/2013 16:53 Dromerace#9
Nein, hatte ich nicht, habs jetzt reingemacht und bekomme, wenn ich jetzt da ein buchstabe eingebe, ein Fehler und das Programm hängt sich auf^^
also klappt alles perfekt, bis ein buchstabe eingegeben wird

//Hast du zufällig skype oder so? dann müssen wir das nicht hier machen, nur wenn du willst ;)


// Hast du das mit dem integer so gemeint?

€dit: Problem gelöst, habe
Code:
cin >> input;
		limit = atol(input.c_str());
		if(limit == 0)
		{
		 cout << "Bitte NUR!! Zahlen!!" << endl;
		 ZahlenRaten();
		}
Eingefügt, jetzt geht es