Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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.

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

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

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

weil ich ja mit den werten rechnen. und mit strings kann ich ja nicht rechnen.

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.

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

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

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.

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

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

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.