float mit double und int vergleichen c?
Guten Tag,
unten steht der quellcode. meine absicht ist es, dass überprüft wird ob die eingabe(eine münze) eine echte münze ist. mein problem der erkennt die eingabe obwohl man z.b. 2 eingibt als falsche münze an. habe es schon mit typ umwandlung versucht aber klappt auch nicht. könnt ihr helfen?
ignoriert bitte den shitty code, versuche mich gerade an c aus
Lösung:
if bedingung muss geändert werden
if (einwurf != 0.05f && einwurf != 0.10f && einwurf != 0.20f && einwurf != 0.50f && einwurf != 1.0f && einwurf != 2.0f)
1 Antwort
EDIT:
Auch ne, sorry, dein Problem ist, dass du in deiner ersten If-bedingung Verunden und nicht Verordern musst, damit es klappt.
Derzeit wertet deine If-Bedingung immer zu "true" aus.
Printe dir einmal die Konstante und einmal deine Ausgabe mit allen Nachkommastellen aus und schau, ob das dasselbe ist.
Womöglich castest du davor irgendwie falsch oder die Werte können nicht dargestellt werden und werden unterschiedlich gerundet.
(Ich würde bei dieser Aufgabe im Übrigen sowieso lieber Integers verwenden und die als Cents interpretieren.)
ja ich sehe wenn ich 0.10 eingebe speichert er 0.10000004367 oder so ne scheiße ab
ich gebe 0.10 ein in die variable "einwurf" wird 0.10000004357 gespeichert. aber einwurf und 0.10 in der if bedingung lassen sich nicht vergleichen, obwohl es vergleichbar sein müsste
der einwurf wert wird beim vergleichen in -1610612736 geändert. deswegen der fehler
int main()
{
double test = scanf_s("%d", &test);
printf("%d", test);
if (test != 0.10)
printf("\t%d", test);
return 0;
}
ich gebe 0.10 ein und 0 wird ausgegeben. hab langsam kein bock mehr :D
Der Forma-String "%d" scannt ein Integer, keine Gleitkomma-Zahl. Entsprechend wird er Wert schon beim Einlesen gerundet oder es geht ganz schief.
By the way der Syntax
double test = scanf_s("%d", &test);
ist wharscheinlich falsch, denn der Rückgabewert wird vermutlich die Zahl der gelesenen Zeichen sein und nicht der gelesene Wert.
Versuche mal folgendes:
double test;
scanf_s("%lf", &test);
und tausche den Format-String auch an den sonstigen Stellen aus.
Code:
int main()
{
float test;
scanf_s("%f", &test);
printf_s("%f", test);
if (test != 0.10)
printf_s("\t%f", test);
return 0;
}
Ausgabe :
0.10
0.100000 0.100000
wenn ich doch 0.10 eingebe dürfte er doch nicht die if bedingung ausführen....warum macht er das
Deshalb printe dir einmal auf die Konstante aus mit voller Präzision.
Deine Konstante ist nämlich ein Double und hat deshalb eine höhere Präzision und rundet deshalb evtl bei 0.10 auf einen anderen Wert als dein float.
printf_s("%.*lf", test);
printf_s("%.*lf", 0.10);
printf_s("%.*lf", 0.10f);
float test;
scanf_s("%f", &test);
printf_s("%lf\n", test);
printf_s("%lf\n", 0.10);
printf_s("%lf\n\n", 0.10f);
if (test != 0.10) {
printf_s("%lf\n", test);
printf_s("%lf\n", 0.10);
printf_s("%lf\n", 0.10f);
}
printf_s("\t\n\n%f\n\n", test);
return 0;
0.10
0.100000
0.100000
0.100000
0.100000
0.100000
0.100000
0.100000
if bedingung wird immernoch ausgeführt
ich werde jetzt die 0,05 & 0,1 & 0,2 euto / cent stücke als variablen speichern, dann passiert das problem nicht mehr. is zwar kacke aber langsam is die luft raus ahah
ah ok. ja sehe es. danke dir auf jeden fall. gut was gelernt. danke für deine zeit
hahah oh man danke. soo dumm. manchmal steht man echt aufm schlauch. danke dir jetzt klappt es.
jezt erkennt er 0.5 & 1 & 2 aber 0.10 & 0.20 erkennt er nicht ...woran kann das liegen?