c++ Zinsrechner
lima-city → Forum → Programmiersprachen → C/C++ und D
anweisung
ausgabe
bekannten grund
berechnen
break
code
compiler
dank
eingabe
entwicklungsumgebung
komischen fehler
laufzeit
lehrbuch
nerv
praktische kommandos
programm
switch
wahl
weiteren eingabe
zinssatz
-
Ja ich wollte son kleines c++ Programm zum üben schreiben und hab son komischen Fehler!
Ich hoffe ihr könnt mir sagen was daran falsch ist:
#include <iostream> #include <cmath> using namespace std; int main() { float Startguthaben, Endguthaben, Laufzeit, Zinssatz; short wahl; cout << "Zinsrechner\n"; cout << "Was möchten Sie berechnen? (1)Endguthaben (2)Zinsen (3)Laufzeit\n"; cin >> wahl; switch(wahl) { case '1' : cout << "\nStartguthaben: "; cin >> Startguthaben; cout << "\nLaufzeit: "; cin >> Laufzeit; cout << "\nZinssatz: "; Endguthaben = Startguthaben*pow(((100+Zinssatz)/100),Laufzeit); cout << "\nEndguthaben: " << Endguthaben; break; case 2 : break; case 3 : break; default: cout << "ungültige Eingabe"; } return 0; }
Nach dem ich zum testen in die Abfrage 1 eingebe und bestätige bricht das Programm bei mir ab
Wisst ihr warum das so ist?
mfg
crushedreality -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
bekommst du irgend eine Fehlermeldung wenn sich dsa Programm beendet?
und ich bin mir nicht ganz sicher, aber ich meine bei default muss ebenfalls ein "break;" stehen. -
äh nein bei dem default fehlt kein break
und die Fehlermeldung die ich nach der Eingabe der 1 erhalte lautet:
Process returned 0 (0x0) execution time : 5.265 s
und in der Entwicklungsumgebung steht dann noch unten im Protokoll:
Prozess wurde mit Status -1073741510 beendet.
ja mehr nicht ka ob das ne richtige Fehlermeldung ist -
ho ;)
case '1' :
Du hast hier einen Short, und keinen String. Lass also einfach das Anführungszeichen weg.
case 1:
lg
Sincer
PS: Habe dein Programm nicht getestet, aber das sollte den Fehler beheben ;)
// EDIT:
Achja, und um die Frage mit dem Default-Break zu klären:
Guter Stil wäre es, wenn man das break; immer verwendet, also auch beim default.
Wenn du das default aber an letzter Stelle hast, wie es bei dir der Fall ist, kannst du es genau so gut auch weg lassen, ohne, dass sich etwas am Programmablauf ändert.
Und den ganz neugierigen empfehle ich mal auszuprobieren, was passiert, wenn man das break; ganz weg lässt :D (Es gibt da ein paar ganz nette Eigenschaften / Effekte, die man hin und wieder sogar gebrauchen kann :P )
Beitrag zuletzt geändert: 20.2.2011 12:49:41 von sincer -
stimmt zwar aber selbst dann hätte es ja zumindest zu default springen müssen da es ja dann ungleich gewesen wäre
ich hab das jetzt geändert und getestet und der Fehler ist immer noch der gleiche.
Vllt kann das wirklich mal einer kurz testen und mir sagen woran das liegt?
Irgendwie soll ja c auch probleme damit haben wenn ich enter drücke da dies als 2. Zeichen gewertet wird. Kann dies vllt das Problem sein?
Ich weiß jetzt nicht welchen Stellenwert das break in c hat, aber in anderen Programmiersprachen wird es zum unterbrechen von Schleifen und änlichen Strukturen verwendet, so dass Sprünge im Quelltext gemacht wird, was wiederum als unsauberer Programmierstil angesehen wird. Deshalb wollte ich fragen ob das break wirklich gesund ist wenn ich es ständig verwende?
Beitrag zuletzt geändert: 20.2.2011 12:55:47 von crushedreality -
also jetzt mal ganz ehrlich,
ich habe dein Quelltext soeben getestet und wenn ich, wie oben schon gesagt bei aus
case '1' :
ein
case 1 :
mache sowie, hinter default ein break; setze
default: cout << "ungültige Eingabe"; break;
funktioniert das Programm einwandfrei!
Außerdem hast du vergessen den Zinssatz abzufragen, bzw. eher vergessen wo drin er den Zinssatz speichern soll,
cin >> Zinssatz;
um deine Ausgabe aber auch noch lesen zu können, bevor sich das Programm beendet, würde ich dir Empfehlen eine Sleep anweisung einzufügen:
Hier die Funktion davon :
#include <time.h> void sleep(unsigned int mseconds) { clock_t goal = mseconds + clock(); while (goal > clock()); }
und dann vor return einfach z.B.
sleep(5000);
eintragen damit du 5 Sec Zeit hast deine ausgabe zu betrachen... kannst ja gerne auch die Zeit noch variieren.... einfach die 5000 durch andere Millisekunden ersetzten.
Beitrag zuletzt geändert: 20.2.2011 13:50:12 von excision -
Hallo crushedreality,
ich habe gerade den Code vom ersten Posting ausprobiert und der läuft bei mir fehlerfrei. D.h. wenn man die 1 eingibt, dann gibt er "ungültige Eingabe" aus und beendet sich mit Rückgabewert 0.
Welchen Compiler hast Du denn eigentlich? Ich habe es mit g++ getestet.
Edit:
Füge mal vor "return 0;" folgendes ein:
cin.get(); // das abschließende '\n' der vorherigen Eingabe cin.get(); // eine beliebige Eingabe
Beitrag zuletzt geändert: 20.2.2011 14:05:01 von darkpandemic -
@excision: Warum so kompliziert und unpraktisch?
Ein
vor dem return ist meiner Meinung nach in diesem Fall vollkommen ausreichend ;)getch();
crushedreality schrieb:
Deshalb wollte ich fragen ob das break wirklich gesund ist wenn ich es ständig verwende?
Nein, break ist kein schlechter Programmierstil. break und continue sind in Schleifen sehr praktische Kommandos die man immer wieder brauchen kann.
Gerade im Switch-Case ist die Verwendung von break ganz natürlich.
goto ist schlechter Stil :D
lg
Sincer -
@sincer
war jetzt das erste was mir einfiel xD hast ja eigentlich recht mit
:Dgetch();
-
Ja danke allen es geht jetzt,
ich hab einfach das Projekt gelöscht, ein neues erstellt und den Quelltext dort eingefügt und dann lief es^^.
Woran es also genau lag weiß ich nicht.
Die Abfragen nach einer weiteren Eingabe am Ende brauch ich aus irgendeinem mir nicht bekannten grund nicht, da die Konsole von alleine geöffnet bleibt.
Also danke ich mach dann mal im Lehrbuch weiter und nerv euch dann bei der nächst besten Gelegenheit wieder^^.
PS.:
ich verwende den GNU GCC Compiler mit der Entwicklungsumgebung Code::Blocks
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage