...ungueltig...
-
Leztens hab ich mal wieder an einem selbst geschriebenem Programm geübt um meinen gebrochenen Wortschatz ewas zu erweitern.
Das Programm:
#include <stdio.h>
#include <stdlib.h>int main(int argc, char *argv[])
{
int ressource;printf("\nWertmetallrechner v0.1\n");
printf("\nWaehlen sie ein Wertmetall aus\n\n");
printf("\n1) Kupfer\n");
printf("\n2) Silber\n");
printf("\n3) Gold\n\n");scanf("%d", &ressource);
float preis=0;
switch(ressource) {
case 1: preis=68.244;break;
case 2: preis=9222,79;break;
case 3: preis=1383.74;break;}
float volume=0;
printf("\nNennen sie die gewuenschte Menge (in m³)\n\n");
scanf("%f", &volume);printf("\n\nDer Preis betraegt %.4f $(USD)\n\n",volume*preis);
float ausgabe=0;
printf("\n\nGeben sie Bitte den Preis von %.4f $ (USD) ein\n\n",volume*preis);
scanf("%f", &ausgabe);if(ausgabe==volume*preis) {
printf("\n\nDanke fuer ihren Einkauf.\n\n");
}else { printf("\n\nDie Geldeingabe war ungueltig\n\n");
}system("PAUSE");
return 0;
}Und wenn ich dann den Preis eingebe um so zu sagen zu "bezahlen"
sagt er mir ...Geldeingabe ungueltig...
kann mir jemand helfen ich weiß ehrlich gesagt nicht wo das Problem liegt.
Ich bedank mich schon mal im voraus.
-
Fließkommazahlen werden mit dem . (Punkt) als Dezimaltrenner eingegeben (case 2 bei dir)
Fließkommazahlen auf Gleichheit zu prüfen ist schlecht, da einige Zahlen nicht beliebig genau dargestellt werden können.
Gib deine Eingaben doch einfach nochmal aus (mit mehr Nachkommastellen).
printf("\nPreis: %.8f ; Ausgabe: %.8f", volume*preis, ausgabe);
Tipp: Code markieren und auf den C/C++ Button unter den
klicken
-
Das ist die Ausgabe von deiner Zeile 38 (wenn du die cpp-Tags für Code benutzt, dann kann man ihn auch hier im Forum lesen. Guck mal links unter den Smileys). Diese Ausgabe kommt, weil der Vergleich zwei Zeilen vorher praktisch immer schief gehen wird, da du hier eine Fließkommazahl aus einer Rechnung mit einer Fließkommazahl aus einer Eingabe auf absolute Gleichheit prüfst (Wobei mir die Logik hinter der Abfrage nicht klar ist, aber ich spreche jetzt nur von den technischen Aspekten). Da stecken gleich zwei Problem dahinter:
1. Du weißt nicht so recht, was Fließkommazahlen überhaupt sind und denkst, es wären Dezimalzahlen wie in der Schule. Das sind sie aber nicht. Fließkommazahlen sind ziemlich komplexe Datentypen, die in ihrer Darstellung teilweise wie Dezimalzahlen aus der Schule aussehen, aber es ist ein Trugschluss, dass sie das gleiche wären. Man muss sich schon ein wenig mit den Hintergründen von Fließkommaarithmetik beschäftigen, wenn man damit umgehen möchte.
2. Du verwendest Fließkommazahlen für Geld. Auch Geld sieht aus wie eine Dezimalzahl aus der Schule, aber auch hier ist die Ähnlichkeit rein optisch. Und durch die Kette Geld sieht aus wie eine Dezimalzahl, sieht aus wie eine Fließkommazahl kommst du zu dem Schluss eine Fließkommazahl für Geld zu benutzen. Aber kaum etwas wäre verkehrter! Alleine schon hier im Forum wirst du unzählige Threads zu diesem Thema finden, selbst heute gab es das thema schon ein anderes Mal.
P.S.: In Zeile 21 willst du sicherlich einen Punkt, kein Komma. Natürlich unter den Einschränkungen von oben, dass du an sich gar keine Fließkommazahlen möchtest und das Programm umschreiben solltest.