• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

[C++] Fehler bei Buchstabeneingabe

dschems

Neues Mitglied
hallo Leute, ich habe wiedermal ein kleines Problem,

ich lerne momentan C++, IDE ist Code::Blocks. Ich programmieren zurzeit einen Taschenrechner für die Konsole, soweit funktioniert auch alles, nur wenn man einen Buchstabe eingibt, dann gibt die Konsole eine Endlosschleife aus, ich habe jetzt schon versucht mit einer If bedingung zu machen, dass wenn man einen Buchstaben eingibt, man zu einer Stelle kommt, wo man dann angeben muss ob man nochmal ausprobieren möchte oder nicht, das funktioniert auch, nur die Konsole gibt eine endlosschleife aus, ich hoffe ihr konnt mir helfen.



#include <iostream>
#include <cstdlib>
#include <string.h>


using namespace std;

char laufzeit;
int auswahl;
int zahl1;
int zahl2;
int zahl3;
int zahl4;
int zahl5;
int zahl6;
int zahl7;
int zahl8;
int main()
{
cout << "Mein erster Taschenrechner " << endl;
nochmal:;
cout << "(1) Addieren (2) Subtrahieren (3) Multiplizieren (4) Dividieren" << endl;
cin >> auswahl;
switch(auswahl){
//addieren
case 1:
cout << "Gut, wir addieren jetzt!" << endl;
cout << "Waehle jetzt bitte die erste Zahl";
cin >> zahl1;
//buchstben nicht erlaubt (test)
if(zahl1 == 'a' || zahl1 == 'b' || zahl1 == 'c' || zahl1 == 'd' || zahl1 == 'e' || zahl1 == 'f' || zahl1 == 'g' || zahl1 == 'h' || zahl1 == 'i' || zahl1 == 'j' || zahl1 == 'k' || zahl1 == 'l' || zahl1 == 'm' || zahl1 == 'n' || zahl1 == 'o' || zahl1 == 'p' || zahl1 == 'q' || zahl1 == 'r' || zahl1 == 's' || zahl1 == 't' || zahl1 == 'u' || zahl1 == 'v' || zahl1 == 'w' || zahl1 == 'x' || zahl1 == 'y' || zahl1 == 'z'){goto faeingabe; system("pause");}
cout << "Jetzt fehlt nurnoch die zweite ";
cin >> zahl2;
cout << zahl1 << " und " << zahl2 << " ergeben " << zahl1 + zahl2 << endl;
faeingabe:;
cout << "Moechtest du nochmal rechnen? (j/n)";
cin >> laufzeit;
if(laufzeit == 'j'){
goto nochmal;
}
else if(laufzeit == 'n'){
cout << "Ok, das Programm wird jetzt beendet!" << endl;
goto stop;
}
else{
cout << "Das ist eine ungueltige eingabe!!" << endl;
goto faeingabe;
}
break;

//subtrahieren
case 2:
cout << "Du hast Subtrahieren gewaehlt" << endl;
cout << "Waehle jetzt die erste Zahl" << endl;
cin >> zahl3;
cout << "Jetzt noch die zweite Zahl" << endl;
cin >> zahl4;
cout << zahl3 << " Subtrahiert von " << zahl4 << " ergibt " << zahl3 - zahl4 << endl;
fseingabe:;
cout << "Moechtest du nochmal rechnen? (j/n)";
cin >> laufzeit;
if(laufzeit == 'j'){
goto nochmal;
}
else if(laufzeit == 'n'){
cout << "Ok, das Programm wird jetzt beendet!" << endl;
goto stop;
}
else{
cout << "Das ist eine ungueltige eingabe!!" << endl;
goto fseingabe;
}
break;

//multiplizieren
case 3:
cout << "Du hast multiplizieren gewaehlt" << endl;
cout << "Wahle jetzt die erste Zahl " << endl;
cin >> zahl5;
cout << "Jetzt noch die Zweite Zahl" << endl;
cin >> zahl6;
cout << zahl5 << " multipliziert mit " << zahl6 << " ergibt " << zahl5 * zahl6 << endl;
fdeingabe:;
cout << "Moechtest du nochmal rechnen? (j/n)";
cin >> laufzeit;
if(laufzeit == 'j'){
goto nochmal;
}
else if(laufzeit == 'n'){
cout << "Ok, das Programm wird jetzt beendet!" << endl;
goto stop;
}
else{
cout << "Das ist eine ungueltige eingabe!!" << endl;
goto fdeingabe;
}
break;


//dividieren
case 4:
cout << "Du hast dividieren gewaehlt gewaehlt \nWaehle jetzt bitte die erste Zahl" << endl;
cin >> zahl7;
cout << "Waehle jetzt bitte noch die zweite Zahl " << endl;
cin >> zahl8;
cout << zahl7 << " Dividiert durch " << zahl8 << " ergibt " << zahl7 / zahl8 << endl;
fmeingabe:;
cout << "Moechtest du nochmal rechnen? (j/n)";
cin >> laufzeit;
if(laufzeit == 'j'){
goto nochmal;
}
else if(laufzeit == 'n'){
cout << "Ok, das Programm wird jetzt beendet!" << endl;
goto stop;
}
else{
cout << "Das ist eine ungueltige eingabe!!" << endl;
goto fmeingabe;
}
break;
}
stop:;
system("pause");
}
 
Zuletzt bearbeitet:
Werbung:
Da der Quellcode sehr unübersichtlich ist würde ich erstmal raten eine while schleife zu nutzen, statt mit goto zu arbeiten.
Auch ist es sehr hilfreich Methoden zu verwenden, denn das ist der vorteil von C++ das es OOP hat.
Zum Beispiel würde ich so abfragen ob die Eingabe eine Nummer ist oder nicht.

Code:
bool isNumeric1(string stringToCheck)
{
  bool numeric = false;
 
  if(stringToCheck.find_first_not_of("0123456789.") == string::npos)
    numeric = true;
 
  return numeric;
}

Leider sind auch keine einrückungen zu erkennen was das ganze erschwert. Ein goto Stop kann ich erkennen, aber wenn ich richtig sehe,
wird man zu einer case Anweisung geschickt? Das kann nicht richtig sein.
 
Lies dir mal das folgende durch: Using cin to get user input. - C++ Forum



Wo hast du gelernt "goto" zu verwenden? Damit machst du Programme nur unübersichtlicher und anfälliger für Fehler - so gut wie alle Programmierer sehen dieses Konstrukt schon seit Jahrzehnten als Schwachsinn an.
 
Werbung:
Ok, erstmal danke für eure Hilfe, wie gesag sind das meine ersten Versuch, das mit dem goto habe ich gefunden als ich gegoogelt habe wie man zu einer bestimmten Stelle springen kann. Das mit den Einrückungen ist weil ich nicht weiß wie man hier im Forum den Code so Postet, wäre nett wenn mir das einer sagen könnte.
Ansonsten, werde ich eure Tips zu Herzen nehmen und dann damit weitermachen.

lG dschems
 
Ok, ich lese mir das mit Funktionen durch wie das genau funktioniert und werde das dann benutzen. Danke auch für den Beispielcode.
 
Werbung:
Zurück
Oben