Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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.

Geschrieben

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...

Geschrieben (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 von mrfloppi
Geschrieben (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 von mrfloppi
Geschrieben

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.

Geschrieben (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 von mrfloppi
Geschrieben

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? ;)

Geschrieben

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.

Geschrieben

  • Als String einlesen.
  • isdigit

    wenn nein: Meldung


    wenn 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. ;)

Geschrieben
isdigit
Nicht 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].
Geschrieben
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:

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...