Programm bricht einfach so ab
-
Habe soeben ein C-Testprogramm geschrieben, mit dem man ausrechnen kann, wann man mit einem Kapital k einem Jahreszinssatz n einen bestimmten Betrag erreicht hat - der Code ist auch soweit fertig, aber immer, wenn ich die .exe ausführen will, kommt eine Fehlermeldung "Zinsberechnung.exe funktioniert nicht mehr".
Der Quellcode ist folgender:
/* Dieses Programm berechnet zu einem Anfangskapital und jährlichem Zinssatz, wie viele Jahre benötigt werden, damit das Kapital = Zielsumme ist */ #include <stdio.h> float bitte_eingeben(char *); int main(void) { int jahre_bis_zielsumme_erreicht = 0; float kapital = bitte_eingeben("das Kapital"); float zielsumme = bitte_eingeben("die Zielsumme"); float zinssatz = bitte_eingeben("den Zinssatz in Prozent"); while (kapital <= zielsumme) { kapital += kapital * (1 / zinssatz); //Rechnet Prozente drauf jahre_bis_zielsumme_erreicht++; } printf("\nEs wuerde %d Jahre dauern.", jahre_bis_zielsumme_erreicht); } float bitte_eingeben(char *was) { float eingabe = 0; if (was != "") { printf("\nBitte geben Sie %s ein: ", *was); scanf("%f", &eingabe); } return eingabe; }Woran kann das liegen?
PS: Bin für alle Verbesserungen offen

-
Dieses C++-Programm passt vielleicht als check-up dazu:
#include <iostream> #include <cmath> using namespace std; int main() { double g, k, n, z; cout << "Grundkapital: "; cin >> g; cout << "Zins (%): "; cin >> z; cout << "Jahre: "; cin >> n; k = g * pow( 1.0 + z/100.0, n ); cout << endl << "Ein Kapital von " << g << " Euro, angelegt zu " << z << " Prozent," << endl << "ergibt nach einer Laufzeit von " << n << " Jahren" << endl << "ein Endkapital von " << k << " Euro." << endl; }
-
/*Rechnet Prozente drauf*/anstelle C++-Kommentar!
Ansonsten Pointer-Problem! So ist es lauffähig:
printf("\nBitte geben Sie %s ein: ", was);Ergebnisse sind leicht falsch. Problem: Prozenteingabe beim Zins! Ich muss 1 für 100% eingeben.
Bitte geben Sie das Kapital ein: 1000
Bitte geben Sie die Zielsumme ein: 2000
Bitte geben Sie den Zinssatz in Prozent ein: 1
Es wuerde 2 Jahre dauern.
Bei 100% habe ich das doch schon nach einem Jahr erreicht! Ergebnis 2 ist also falsch.
-
C-reator schrieb:
float bitte_eingeben(char *was) { float eingabe = 0; // so kann man in C keine Strings vergleichen. Was du bräuchtest wäre strcmp(), // aber was willst du hier eigentlich erreichen? if (was != "") { // Die Variable "was" ist vom Typ char* und zeigt auf einen String. // Durch das Sternchen davor dereferenzierst du den Zeiger, und erhälst ein // einzelnes Zeichen, was aber natürlich dann nicht zu "%s" paßt. Gibt dir // dein Compiler hierbei keine Warnung aus? printf("\nBitte geben Sie %s ein: ", *was); scanf("%f", &eingabe); } return eingabe; }Davon mal abgesehen ist dein Programm natürlich in C geschrieben, und damit hier im falschen Forum...
-
@ Erhard Henkes:
Er hat halt ins falsche Forum gepostet...@ C-reator:
Hier muss das * weg, du willst schliesslich nicht einen einzelnenchar, sondern einen C-String, alsochar*ausgeben.printf("\nBitte geben Sie %s ein: ", *was);
-
Er hat halt ins falsche Forum gepostet...
C ist vollständig in C++ enthalten.

-
Ah, dankeschön für die Hilfe, sorry, dass ich ins falsche Forum gepostet habe - ich dachte, ein C++-Programm wäre auch ein C-Programm ... da sich z.B. .cpp-Dateien ausführen lassen, obwohl in ihnen nur C-Code ist.
Macht es dasher wirklich einen Unterschied, ob ich einen C++-Kommentar mache? Oder ist es schlecht, wenn man C und C++ mixt?
Bei der if-Abfrage hätte ich natürlich
if (*was != '\0')schreiben sollen; ich wollte damit erreichen, dass erst geprüft wird, ob man wirklich einen String übregeben hat, denn sonst könnte "Bitte geben Sie ein:" herauskommen.
PS: Ich habe mich bei der Formel vertan, richtig wäre natürlich
kapital += kapital * zinssatz / 100;.
-
C-reator schrieb:
ich dachte, ein C++-Programm wäre auch ein C-Programm
Umgekehrt.

C-reator schrieb:
Macht es dasher wirklich einen Unterschied, ob ich einen C++-Kommentar mache? Oder ist es schlecht, wenn man C und C++ mixt?
Nicht grundsätzlich schlecht, besonders bei Kommentaren nicht. Aber ich würde einheitlich bleiben.
Wenn ich allerdings die Möglichkeit habe, C++ zu nutzen, würde ich das auch tun. Beispielsweise wäre dieser Fehler hier in C++ gar nicht aufgetreten, da
std::coutim Gegensatz zuprintf()typsicher ist.Und ist die Abfrage auf
'\0'sinnvoll? Du übergibst ja kaum leere Stringliterale, erst recht nicht aus Versehen, oder?