Double-Werte mit scanf in c einlesen

Lesezeit: 3 Minuten

Benutzeravatar von user1880009
Benutzer1880009

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:

double a,b;
printf("--------\n"); //seperate lines
scanf("%ld",&a);
printf("--------\n"); 
scanf("%ld",&b);
printf("%d %d",a,b);

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

Benutzeravatar von simonc
Simonc

Verwenden Sie die %lf Formatbezeichner zum Lesen eines Double:

double a;
scanf("%lf",&a);

Wikipedia hat eine anständige Referenz für verfügbare Formatbezeichner.

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

Benutzeravatar von Kyborek
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.

Beispiel:

double a,b;
printf("--------\n"); //seperate lines
scanf("%lf",&a);
printf("--------\n"); 
scanf("%lf",&b);
printf("%lf %lf",a,b);

Sie verwenden die falsche Formatierungssequenz für doubledu solltest benutzen %lf Anstatt von %ld:

double a;
scanf("%lf",&a);

Benutzeravatar von Biswajit Roy
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

Benutzeravatar von JamesBond
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.

Benutzeravatar von Cristi G
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

Benutzeravatar von Tharif
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

1413630cookie-checkDouble-Werte mit scanf in c einlesen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy