mrfloppi Geschrieben 8. Januar 2010 Geschrieben 8. Januar 2010 Hi, ich muss ein Programm schreiben, das einen Tilgungsplan für Kredite errechnet und darstellt. Das läuft soweit auch, das Problem was ich nicht kann oder nicht verstehe ist, das bei falschen eingaben zb.: für die Rate einen Text eingebe, statt den Betrag. Wenn ich es derzeit mache stürzt das programm natürlich ab, da ich die Variable als double deklariert ist. Wie bekomme ich das hin, zumal ich keine objekte oder zeiger benutzen darf. ich benutze Netbeans 6.8. Kann mir da einer ein Tip geben? Vielen Dank im Vorraus. Zitieren
TDM Geschrieben 8. Januar 2010 Geschrieben 8. Januar 2010 Wie bekomme ich das hin, zumal ich keine objekte oder zeiger benutzen darf. C++ ohne Objekte?! :confused: Na dann frag ich mich, wie du überhaupt was eingeben/ausgeben kannst... Zitieren
robotto7831a Geschrieben 8. Januar 2010 Geschrieben 8. Januar 2010 Hallo, Du könntest z. b. mit atoi den Text nach int konvertieren. Ich meine wenn atoi nicht funktioniert dann liefert der eine numerische Null und das kann man ja schön prüfen. Frank Zitieren
mrfloppi Geschrieben 8. Januar 2010 Autor Geschrieben 8. Januar 2010 (bearbeitet) Fragen Sie mein Prof. Breymann:) Ich gehe von aus, das wir nicht Objektorientiert arbeiten dürfen. Aber darum geht es auch nicht:) ich brauch in dem Programm eine Plausiblitätsprüfung der Eingaben, aber ich hab nicht mal einen ansatz. Ausser das ich sicher ne schleife benutzen muss^^ Ich hab ja zum Beispiel Rate die 400 beträgt zb. Aber wenn man "x" eintippt stürzt es ab, aber wie kann ich das verhindern? @robotto wandelt er auch zahlen nicht in ein int wert um? wie sieht die funktion aus? Bearbeitet 8. Januar 2010 von mrfloppi Zitieren
robotto7831a Geschrieben 8. Januar 2010 Geschrieben 8. Januar 2010 Ja schon aber man muss mit der Zahl danach ja nicht weiter arbeiten. Es geht ja nur um die Prüfung. Let me google that for you Frank Zitieren
mrfloppi Geschrieben 8. Januar 2010 Autor Geschrieben 8. Januar 2010 (bearbeitet) wenn ich die funktion atoi benutze, meldet er: main.cpp:26: error: cannot convert 'double' to 'const char*' for argument '1' to 'int atoi(const char*)' oder gibt es ne möglichkeit, double in strings umzuwandeln, weil dann müsste es mit atoi ja gehen, oder? Bearbeitet 8. Januar 2010 von mrfloppi Zitieren
robotto7831a Geschrieben 8. Januar 2010 Geschrieben 8. Januar 2010 Warum läst Du die Eingabe nicht in einem String rein laufen? Frank Zitieren
mrfloppi Geschrieben 8. Januar 2010 Autor Geschrieben 8. Januar 2010 weil ich ja mit den werten rechnen. und mit strings kann ich ja nicht rechnen. Zitieren
Klotzkopp Geschrieben 8. Januar 2010 Geschrieben 8. Januar 2010 Bevor du atoi irgendwie sinnvoll nutzen kannst, musst du natürlich zuerst deine Eingabe so umstellen, dass sie auch tatsächlich einen String einliest. Wenn du nach wie vor in double einliest, bringt dir das gar nichts. Abstürzen sollte das aber trotzdem nicht. Zeig doch mal deinen Code für die Eingabe. Dann müssen wir hier nicht so viel raten. Zitieren
mrfloppi Geschrieben 8. Januar 2010 Autor Geschrieben 8. Januar 2010 (bearbeitet) Hier der Eingabe teil: float darlehen, rate, zinssatz, dauer, restschuld, tilgung, zinsen, szinsen, srate, stilgung, laufzeit; int start, jahr; cout << "Bitte geben Sie die folgenden Daten ein:" << endl; cout << "Darlehen: "; cin >> darlehen; cout << "Rate: "; cin >> rate; cout << "Zinssatz nominal: "; cin >> zinssatz; cout << "Zinsbindungsfrist: "; cin >> dauer; cout << "Anfangsmonat: "; cin >> start; cout << "Anfangsjahr: "; cin >> jahr; Bearbeitet 8. Januar 2010 von mrfloppi Zitieren
Klotzkopp Geschrieben 8. Januar 2010 Geschrieben 8. Januar 2010 Da sollte nichts abstürzen, auch wenn du statt Zahlenwerten Texte eingibst. Allenfalls musst du den Fehlerstatus des Eingabestreams prüfen, ggf. zurücksetzen und noch nicht eingelesene Zeichen verwerfen. Aber ich würde das einfach ignorieren, und davon ausgehen, dass der Benutzer das Programm richtig verwendet. Alle möglichen Fehleingaben sauber abzufangen, wäre vermutlich komplizierter als die eigentliche Aufgabe des Programms. Und was deine Anforderung angeht, keine Objekte zu benutzen: Was glaubst du, sind cin und cout? Zitieren
mrfloppi Geschrieben 8. Januar 2010 Autor Geschrieben 8. Januar 2010 Wenn ich jetzt ein x eingebe, kommt eine endlosschleife mit irgendwelchen werten. In der Aufgabenstellung ist vorgegeben, dass bei falsch eingaben das programm weiterhin nutzbar sein soll. Zitieren
TDM Geschrieben 8. Januar 2010 Geschrieben 8. Januar 2010 Als String einlesen. isdigitwenn nein: Meldungwenn ja: stringstream / strstream / atoi mit Zahl weiterrechnen Und was deine Anforderung angeht, keine Objekte zu benutzen: Was glaubst du, sind cin und cout? Siehe erster Post. Zitieren
Klotzkopp Geschrieben 8. Januar 2010 Geschrieben 8. Januar 2010 isdigitNicht jedes Zeichen einer Fließkommazahl muss eine Ziffer sein. Der Eingabeoperator kann am besten entscheiden, ob eine Eingabe gültig ist. Insofern halte ich das Einlesen eines Strings für einen Umweg, wenn dann hinterher doch wieder ein Stringstream zum Einsatz kommt. Stringstreams haben natürlich den Vorteil, dass man sie leichter leeren kann als cin, indem man sie einfach neu anlegt. Aber es geht auch mit cin direkt: double x; while( !(cin >> x) ) { cout << "Falsche Eingabe\n"; cin.clear(); cin.ignore(cin.rdbuf()->in_avail()); } [/code] Siehe erster Post. Was denn? Da steht, dass er keine Objekte benutzen darf. Ich wollte nur darauf hinweisen, dass cin und cout Objekte [i]sind[/i]. Zitieren
TDM Geschrieben 8. Januar 2010 Geschrieben 8. Januar 2010 Aber es geht auch mit cin direkt: double x; while( !(cin >> x) ) { cout << "Falsche Eingabe\n"; cin.clear(); cin.ignore(cin.rdbuf()->in_avail()); } Das geht?! :beagolisc Behalt ich mir mal im Hinterkopf. Was denn? Da steht, dass er keine Objekte benutzen darf. Ich wollte nur darauf hinweisen, dass cin und cout Objekte sind. Das wollt ich mit der zweiten Zeile sagen, aber egal, das geht zu sehr ins OT. :floet: Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.