String-Vergleich C - strcmp()
Ich versuche zum vergleichen von zwei Zeichenfolgen, aber ich nicht zu erreichen. Warum?
#include <stdio.h>
#include <string.h>
int main(){
float a = 1231.23123;
char b[32];
sprintf(b, "%f", a);
printf("%s\n", b);
char c[32] = "1231.23123";
if (strcmp(c, b) == 0){
printf("SUCCES\n");
}
else{
printf("DIFFER\n");
}
return 0;
}
Ergebnis:
1231.231201
DIFFER
Aber die beiden strings unterscheiden sich deutlich, so
Drucken Sie die c-und b-Saiten...
Oh..... also meine sprinf falsch funktioniert...
Definiere "scheitern"...
strcmp()
funktioniert, wie es sollte.Drucken Sie die c-und b-Saiten...
Oh..... also meine sprinf falsch funktioniert...
Definiere "scheitern"...
InformationsquelleAutor Bogdan M. | 2013-03-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sich die beiden strings unterscheiden sich deutlich, so
strcmp()
funktioniert, wie es sollte.Das Problem ist, dass
1231.23123
dargestellt werden können alsfloat
. In der Tat, die nächste Zahl, die kann dargestellt werden alsfloat
ist1231.231201171875
, das ist, was Sie sehen (gerundet durchsprintf()
auf sechs Nachkommastellen).InformationsquelleAutor NPE
Wenn Sie möchten, eine festgelegte Anzahl von Ziffern zu vergleichen, gegen die in einer Zeichenfolge, verwenden Sie den Bezeichner für die Genauigkeit in
sprintf
-%.5f
, und wie andere haben darauf hingewiesen, daß die Zahl, die Sie ausgewählt haben, dargestellt werden kann durch einefloat
, aber kann dargestellt werden durch einedouble
. also.5
?Da
%f
druckt 6 Dezimalstellen, es sei denn, Sie sagen es anders.Also ich finde die allgemeinere Lösung wäre es, die Strings werden
"1231.231230"
(und weglassen der.5
).ja, wenn Sie wollen immer 6 Plätze in einem string, aber es würde bedeuten, vergleichen von strings wie
"1.000000"
statt"1.0"
mit%.1f
InformationsquelleAutor teppic
Ist es, da die Genauigkeit von float nicht unterstützen, so viele Ziffern. Also ist b ist nicht "1231.23123". In meinem test, ist es "1231.231201".
InformationsquelleAutor Wangfan Fu
Sie vergleichen diese 2 strings finden Sie hier:
die sind in der Tat andere, so
strcmp
gibt einen Wert ungleich null.Das eigentliche problem hier ist, dass wenn du
float a = 1231.23123;
, die Nummer, die Sie speichern möchten, ina
können nicht dargestellt werden alsfloat
, die nächste Zahl, die dargestellt werden kann, wie einfloat
ist1231.231201171875
in diesem Fall. Haben Sie einen Blick auf OMG Ponys!!! (Aka Der Menschheit: Epic Fail) 😉Um Ihr problem zu lösen würde ich anfangen, mit mit
double
stattfloat
um mehr Genauigkeit. Dann könnten Sie die Präzision (%.5lf
) beim drucken wird diese Zahl in der Zeichenfolge um sicherzustellen, dass die Zahl gerundet, genau wie Sie es brauchen:InformationsquelleAutor LihO