Falscher Rückgabewert
-
Hallo lieber Community,
ich hab ein Problem mit einem C-Programm.
Vorweg, ich Programmiere mit der Entwicklungsumgebung Visual Studio.
Ich hab eine Abfrage, bei der ich eine Zahl eingeben kann und diese Speicher ich dann mit dem Befehl scanf in einer Variable. Danach kommt eine Fallunterscheidung mit switch case. Wenn ich mir nun hier einen Haltepunkt setzte und schau was in der variable drinsteht, steht nie der Wert drin, den ich in der Konsole eingegeben habe.
Komsicherweise geht es aber mit allen Zahlen außer der 0. An was liegt das oder wie kann ich den Fehler beheben.Falls Ihr zum Lösen den Problems noch mehr Infos brauchen, einfach sagen was und ich stell sie euch dann bereit.
Mit freundlichen Grüßen,
Dieter__
-
Ja ich habe ein Frage: Wie sieht der Code aus? -.- (Bitte Code-Tags verwenden)
-
So hier der Code
#include <iostream> #include <conio.h> #pragma hdrstop class Konto { private: float Kontostand; float Zins_Berechnung(float); public: Konto(); Konto(float); float Wert_Aenderung(float); float Kontostand_Lesen(void); float Zins_lesen(void); }; float Konto::Kontostand_Lesen() { return Kontostand; } float Konto::Wert_Aenderung(float stand) { if (stand <=100000 && stand >= 0) { Kontostand = stand; return 1; } return 0; } float Konto::Zins_lesen() { return (Zins_Berechnung(1.5)); } float Konto::Zins_Berechnung(float wert) { float zins; zins = Kontostand * wert / 100; Kontostand += zins; return zins; } Konto::Konto() { Kontostand = 0; } Konto::Konto(float wert) { Kontostand = wert; } int main() { int eingabe; float betrag = 0; Konto *Testkonto; /*Konto Testkonto(5000);*/ while (eingabe != 0) { system("cls"); printf("K O N T O V E R W A L T U N G\n\n"); printf("1 = Kontostand aendern\n"); printf("2 = Kontostand lesen\n"); printf("3 = Zinsen berechnen\n"); printf("0 = Ende der Aktion\n"); printf("Ihre Wahl: "); scanf_s("%i", &eingabe); switch(eingabe) { case 1: printf("\n\nBitte geben Sie einen neuen Betrag ein: "); scanf("%f", &betrag); if (Testkonto->Wert_Aenderung(betrag) == 1) { Testkonto->Wert_Aenderung(betrag); printf("\n\nIhr neuer Kontostand betraegt nun: %.2f Euro.", betrag); } else { printf("\n\nDer eingegebene Wert muss sich zwischen 0 Euro und 100000 Euro befinden."); } printf("\n\nZum Fortfahren beliebige Taste druecken..."); getch(); break; case 2: printf("\n\nIhr Kontostand betraegt %.2f Euro", Testkonto->Kontostand_Lesen()); printf("\n\nZum Fortfahren beliebige Taste druecken..."); getch(); break; case 3: printf("\n\nIhr neues Bankguthaben mit Zinsen %.2f Euro\n Ihr Zinssatz %.2f %%.", Testkonto->Kontostand_Lesen(), Testkonto->Zins_lesen()); printf("\n\nZum Fortfahren beliebige Taste druecken..."); getch(); break; case 0: delete Testkonto; break; default : printf("\n\nAktion nicht verfuegbar."); printf("\n\nZum Fortfahren beliebige Taste druecken..."); getch(); break; } } delete Testkonto; printf("\n\n\nSie haben das Programm beendet.\n\nZum Fortfahren beliebige Taste druecken..."); getch(); return 0; }
-
Das ist kein C ... und auch kein richtiges C++. Du mischst diese zwei Sprachen wahllos. Du verwendest Testkonto komplett falsch und bescheerst deinem Programm undefiniertes Verhalten in Zeile 62. Es ist nur ein Zeiger und kein Objekt. Du löschst später also irgendwas... Richtig wäre dies so:
Konto *Testkonto = new Konto;
Testkonto bitte nur einmal deleten und zwar am Ende und nicht zweimal wie du es machst. Du kannst alternativ auch das Objekt auf dem Stack legen ohne Zieger zu verwenden. mit
Konto Testkonto
Der Zugriff geschieht dann über den ". Operator".
Testkonto.foo()
In C++ verwendet man cout und cin für Eingabe/Ausgabe anstelle von printf und scanf.
Bitte umschreiben. Dann wäre dein Problem wohl schon gelöst.
Noch so als Tipp am Rande: printf und scanf sind in der <cstdio>. <iostream> ist für cout und cin. <conio.h> braucht man üblicherweise nicht, das mit dem getch lässt sich anders lösen.
Und ich würde eingabe initialisieren und Do-While verwenden. Sonst könnte ja beim Ausführen "eingab"e zufällig 0 sein und dein Programm nichts machen.
Auf weitere Fehler habe ich jetzt nicht sonderlich geachten. Also bitte erstml printf und scanf entfernen
Somit wärst du hier im falschen Unterforum.
PS: In C gibt es keine Klassen, also ist dies auch kein C.
ich hab ein Problem mit einem C-Programm.
-
Das ganze Problem an der Sache ist, dass wir das so in der Schule lernen. Ich bei eigentlich VB Programmierer.
Aber warum geht das mit printf und scanf nicht. Ich hab mir jetzt mal von unserem Lehrer die Lösungen geholt und er hat es auch mit cin cout gemacht, obwohl wir das so in der Schule bzw bei ihm im unterricht nie hatte.Bekomme ich das Programm auch mit scanf und printf zum laufen.
Das eine Delete Testkonto, sollte da eigentlich nicht hin. Ich wollte nur was versuchen und habe es anscheinden vergessen zu löschen.
Wenn es weder C noch C++ ist in welches Forum soll ich dann meine Frage schreiben ?
Danke
Gruß,
Dieter__
-
Das ganze Problem an der Sache ist, dass wir das so in der Schule lernen.
Genau das ist das Problem. Es muss ins C++-Forum, weil in C die von dir verwendeten Features (Klassen, new/delete) nicht existieren.
-
Alles klar ;).
Ich werde meine Fragen nun in das C++ Forum schreiben.
Trotzdem vielen Dank für deine schnelle Hilfe. Tolles Forum hier ;).
Habs dennoch hinbekommen.
Gruß,
Dieter__
-
Nein warte bis du verschoben wirst.
-
Habe die nächsten Fragen gemeint.
Dieser hier ist erledigt.
-
Dieter__ schrieb:
Bekomme ich das Programm auch mit scanf und printf zum laufen.
Ja.
-
Noch etwas: Gleitkommazahlen sind ungeeignet für dein Vorhaben. Du könntest integer (für den Bereich von 0-10.000 € reichen locker 32 Bit) verwenden, die den Betrag in Cent speichern.
Ein Negativbeispiel mit floats habe ich gerade hier geschrieben.