boeseskeksi Geschrieben 4. Februar 2010 Geschrieben 4. Februar 2010 Hallo soweit sogut, rechnen tut er schonmal hier ist der Code :#include <iostream> // Input Output Bibliothek using namespace std; void Aufforderung() // Funktion ohne Rückgabewert { cout << "Bitte geben Sie eine Zahl ein"; cout << endl; } void error() { cout << "nicht moeglich!"; cout << endl; } void errordivide() { cout << "teilen durch 0 nicht moeglich!"; cout << endl; } int main () { int zeichen; double zahl1, zahl2, ergebnis; cout << endl; cout << "Geben Sie die Rechenart ein: [1] -> + [2] -> - [3) -> * [4] -> / "; cin >> zeichen; if( zeichen < 0 || zeichen > 4 ) error(); Aufforderung(); cin >> zahl1; Aufforderung(); cin >> zahl2; if(zeichen == 1){ ergebnis = zahl1 + zahl2; cout <<"Das Ergebins lautet:"; cout << ergebnis; cout << endl;} if (zeichen == 2){ ergebnis = zahl1 - zahl2; cout <<"Das Ergebins lautet:"; cout << ergebnis; cout << endl;} if (zeichen == 3){ ergebnis = zahl1 * zahl2; cout <<"Das Ergebins lautet:"; cout << ergebnis; cout << endl;} if (zeichen == 4){ if(zahl2 == 0) errordivide(); else if (ergebnis = zahl1 / zahl2); cout <<"Das Ergebins lautet:"; cout << ergebnis; cout << endl;} system("pause"); return (0); } Er hat noch ein paar "Kinderkrankheiten" wie teilen durch null funktioniert noch nicht so recht und was mein Hauptproblem ist, die eingabe von Buchstaben, ich möchte das er eine Fehlermeldung ausgibt und wieder in die Auswahl zurückspringt, jedoch steh ich da grade n bisis auf dem Schlauch ^^ kann mit jmd helfen ^^
mharms Geschrieben 4. Februar 2010 Geschrieben 4. Februar 2010 (bearbeitet) Ok, was dein Problem mit dem durch "0" teilen ist, versteh ich nicht so ganz gerade. Aber wenn du prüfen willst, ob eine Zahleingegeben ist, lautet das Stichwort "isdigit". Das heißt, du musst die einzelnen Stellen deiner Eingabe überprüfen. z.B. for (i=0; i<[Die Länge der Eingabe]; i++) { if( isdigit([eingabe(i)]) ) //nischts else error(); } C++ hab ich schon länger nicht mehr gemacht, aber ich hoffe es hilft. die Angaben in eckigen Klammern musst du noch ersetzen. mfG Marco Bearbeitet 4. Februar 2010 von mharms
Klotzkopp Geschrieben 4. Februar 2010 Geschrieben 4. Februar 2010 mharms schrieb: Aber wenn du prüfen willst, ob eine Zahleingegeben ist, lautet das Stichwort "isdigit". Das heißt, du musst die einzelnen Stellen deiner Eingabe überprüfen. Bei Fließkommatypen sind auch Nicht-Ziffernzeichen erlaubt, wie Minus, Punkt oder E. Lass das doch besser den >> Operator machen.
mharms Geschrieben 4. Februar 2010 Geschrieben 4. Februar 2010 Klotzkopp schrieb: Bei Fließkommatypen sind auch Nicht-Ziffernzeichen erlaubt, wie Minus, Punkt oder E. Lass das doch besser den >> Operator machen. *Hand an Stirn klatsch* da hast du natürlich Recht Naja, ist halt noch morgens ;D
boeseskeksi Geschrieben 4. Februar 2010 Autor Geschrieben 4. Februar 2010 okay das löst mein Problem bedingt, denn das gibt ne hübsche Endlosschleife die nur mit strg+c beendet werden kann
Klotzkopp Geschrieben 4. Februar 2010 Geschrieben 4. Februar 2010 boeseskeksi schrieb: okay das löst mein Problem bedingt, denn das gibt ne hübsche Endlosschleife die nur mit strg+c beendet werden kann Sollte es aber nicht. Welcher Compiler?
Klotzkopp Geschrieben 4. Februar 2010 Geschrieben 4. Februar 2010 boeseskeksi schrieb: Dev C++Diese Entwicklungsumgebung ist fehlerbehaftet und wird seit Jahren nicht mehr weiterentwickelt. Kann gut sein, dass der Code deshalb nicht funktioniert. Wenn du nicht dazu gezwungen bist, Dev-C++ zu benutzen, steig auf etwas aktuelles um, wie Code::Blocks oder Microsoft Visual C++ Express.
mharms Geschrieben 4. Februar 2010 Geschrieben 4. Februar 2010 Klotzkopp schrieb: Diese Entwicklungsumgebung ist fehlerbehaftet und wird seit Jahren nicht mehr weiterentwickelt. Kann gut sein, dass der Code deshalb nicht funktioniert. Wenn du nicht dazu gezwungen bist, Dev-C++ zu benutzen, steig auf etwas aktuelles um, wie Code::Blocks oder Microsoft Visual C++ Express. Ich würde dir auch Microsoft Visual C++ Express empfehlen. Bekommst du kostenfrei und die Debuggingfunktion ist sehr gut.
boeseskeksi Geschrieben 4. Februar 2010 Autor Geschrieben 4. Februar 2010 okay, das reagiert mal wirklich anders ^^ nur werfen sich da grad mehr Fehler auf die ich erstmal beheben muss ^^
TDM Geschrieben 4. Februar 2010 Geschrieben 4. Februar 2010 boeseskeksi schrieb: if(zeichen == 1){ ergebnis = zahl1 + zahl2; cout <<"Das Ergebins lautet:"; cout << ergebnis; cout << endl;} if (zeichen == 2){ ergebnis = zahl1 - zahl2; cout <<"Das Ergebins lautet:"; cout << ergebnis; cout << endl;} [...] Ich vermisse ein else ... oder noch besser/übersichtlicher wäre switch und Funktionskapselung. boeseskeksi schrieb: system("pause"); Müffelt. cin.get(); boeseskeksi schrieb: Er hat noch ein paar "Kinderkrankheiten" wie teilen durch null funktioniert noch nicht so recht Mathematisch funktioniert das nie. boeseskeksi schrieb: und was mein Hauptproblem ist, die eingabe von Buchstaben, ich möchte das er eine Fehlermeldung ausgibt und wieder in die Auswahl zurückspringt, jedoch steh ich da grade n bisis auf dem Schlauch ^^ kann mit jmd helfen ^^ Hinweis: bool isNumeric( const std::string& s ) { [INDENT]std::stringstream ss(s); double d; ss >> d; return ss.good();[/INDENT] }
boeseskeksi Geschrieben 4. Februar 2010 Autor Geschrieben 4. Februar 2010 TDM schrieb: Mathematisch funktioniert das nie. ja genau, dafür ist eine Fehlermeldung vorgesehen die dann in Kraft tritt, was sie auch tut, allerdings geht das Prog dann aus ^^, aber damit beschäftige ich mich später erst mal den anderen Kram lösen, eins nach dem anderen.
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden