W
Hallo zuup,
Willkommen im C++-Forum.
Deine Frage lässt sich leicht beantworten. Gibst Du etwas ein, was cin (ein std::istream) nicht als Zahl (Typ int) interpretiert, so geht derselbe in den Fehlerzustand. Diesen fragst Du nach Zeile 16 nicht ab(!) sondern machst einfach weiter. Ist ein std::istream im Zustand Fehler, so macht er keine Eingabe mehr, sondern kommt sofort zurück, was in Deinem Fall zu einer Endlos-Schleife führt.
Daher besser:
cout <<"Bitte Rechnung eingeben: " << endl;
while( cin >> zahl1 >> op >> zahl2 && zahl1 != 0 )
{
cout << "= " << rechnung() << endl << endl;
}
die Schleife bricht dann bei einer fehlerhaften Eingabe ab.
Ein Tipp: verzichte möglichst immer(!) auf globale Variablen. In Deinem Fall kannst Du zahl1 , zahl2 und op in main() deklarieren und anschließend als Parameter an rechnung() übergeben. Und ergebnis ist nur lokal in rechnung() nötig. Alles zusammen:
#include <iostream>
using namespace std;
double rechnung( double zahl1, char op, double zahl2 );
int main ()
{
cout <<"\nTaschenrechner v2" << endl;
cout <<"*****************\n" << endl;
cout <<"Bitte Rechnung eingeben: " << endl;
double zahl1, zahl2;
char op;
while( cin >> zahl1 >> op >> zahl2 && zahl1 != 0 )
{
cout << "= " << rechnung( zahl1, op, zahl2 ) << endl << endl;
}
return 0;
}
double rechnung( double zahl1, char op, double zahl2 )
{
double ergebnis;
switch(op)
{
case '+': ergebnis = zahl1 + zahl2;
break;
case '-': ergebnis = zahl1 - zahl2;
break;
case 'x':
case 'X':
case '*': ergebnis = zahl1 * zahl2;
break;
case '/': ergebnis = zahl1 / zahl2;
break;
default: cout << "Ungültige Eingabe. ";
}
return ergebnis;
}
Gruß
Werner