Ich versuche, 2 Werte mit scanf() in C einzulesen, aber die Werte, die das System in den Speicher schreibt, sind nicht gleich meinen eingegebenen Werten. Hier ist der Code:
Wenn ich 1 und 2 eingebe, gibt CMD ein korrektes zurück, aber b = -858993460 Folgendes habe ich bereits versucht: Verwendung von Float oder Int anstelle von Double, Verwendung von Scanf_s, Verwendung von Scanf(“%d oder %f für %i oder %li oder %lf oder %e oder %g ), mit fflush(stdin) den Tastaturpuffer löschen, zuerst b einlesen und alle möglichen Kombinationen ausprobieren. Ich habe herausgefunden, dass es ein Problem mit der Länge von double auf 32-Bit-Betriebssystemen gibt, so dass Sie gezwungen sind, scanf (“%lf”, &f) zu verwenden, um ein Double einzulesen.Egal was ich tue, der zweite Wert ist immer falsch.
Ich verwende MS VS Express 2012 für Desktop unter Windows 7 32-Bit-Betriebssystem.
Auf Version 3 zurückgesetzt, da die Änderung die Antworten unverständlich machte.
– alk
7. Oktober 2017 um 13:38 Uhr
Simonc
Verwenden Sie die %lf Formatbezeichner zum Lesen eines Double:
Sie müssen die verwenden %lf Formatbezeichner, um auch die Ergebnisse auszudrucken:
printf("%lf %lf",a,b);
schon probiert, funktioniert nur beim ersten Wert, zweiter ist immer noch falsch.
– Benutzer1880009
5. Dezember 2012 um 20:12 Uhr
So sehr ich Wikipedia liebe, ein anständiges grundlegendes C-Buch könnte eine noch bessere Empfehlung für das OP sein (+1)
– NPE
5. Dezember 2012 um 20:14 Uhr
@ user1880009 Sie haben immer noch die verwendet %d Formatbezeichner, um die Ergebnisse zu drucken. Dies führte dazu, dass nur 4 Bytes Ihres Double gelesen und als Int interpretiert wurden. Sie müssen die verwenden %lf Formatbezeichner auch hier. Ich habe meine Antwort aktualisiert, um dies zu zeigen.
– Simonc
5. Dezember 2012 um 20:42 Uhr
%lf um ein Double zu drucken wurde in C99 hinzugefügt; wenn Sie mit älteren Versionen von C kompatibel sein möchten %f verwendet werden, die beides druckt float und double.
– MM
11. November 2014 um 2:57 Uhr
Sag dir: %lf = Llang Fviel = double.
– iBug
7. Oktober 2017 um 13:51 Uhr
Kyborek
Soweit ich weiss %d bedeutet dekadisch, was eine Zahl ohne Dezimalpunkt ist. Wenn Sie den doppelten Wert laden möchten, verwenden Sie %lf Konvertierung (langer Float). Für printf sind Ihre Werte aus demselben Grund falsch, %d wird nur für Ganzzahlen (und möglicherweise Zeichen, wenn Sie wissen, was Sie tun) verwendet.
Sie verwenden die falsche Formatierungssequenz für doubledu solltest benutzen %lf Anstatt von %ld:
double a;
scanf("%lf",&a);
Biswajit Roy
Formatbezeichner in printf sollte sein %f zum doubl Datentypen seit float Datenstile konvertieren schließlich in double Datentypen drin printf.
Es ist kein Ausdruck vorgesehen float Daten. Die Diskussion finden Sie hier: Korrigieren Sie den Formatbezeichner für doppelt in printf
James Bond
Verwenden Sie diese Codezeile, wenn Sie den zweiten Wert scannen: scanf(" %lf", &b);
Ersetzen Sie außerdem alle %ld durch %lf.
Es ist ein Problem im Zusammenhang mit dem Eingabestrompuffer. Sie können auch fflush(stdin) verwenden; nach dem ersten Scannen, um den Eingabepuffer zu löschen, und dann funktioniert der zweite Scanf wie erwartet. Ein alternativer Weg ist das Platzieren eines getch(); oder getchar(); Funktion nach der ersten Scanf-Zeile.
Christi G.
Richtige Wege sind:
double a,b;
printf("--------\n"); //seperate lines
scanf("%lf",&a); //%lf is long float numbers
printf("--------\n");
scanf("%lf",&b);
printf("%f %f",a,b); //%f float number
Tharif
Verwenden %lf hilft Ihnen bei der Lösung dieses Problems.
Verwenden :
scanf("%lf",&doub)
Was ist neu/anders an dieser Antwort? Dasselbe wurde 4 Jahre zuvor gepostet.
– PP
30. Juli 2020 um 7:23 Uhr
14136300cookie-checkDouble-Werte mit scanf in c einlesenyes
Auf Version 3 zurückgesetzt, da die Änderung die Antworten unverständlich machte.
– alk
7. Oktober 2017 um 13:38 Uhr