Dubbele waarden inlezen met scanf in c

Ik probeer 2 waarden in te lezen met scanf() in C, maar de waarden die het systeem in het geheugen schrijft zijn niet gelijk aan mijn ingevoerde waarden. Hier is de code:

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

Als ik 1 en 2 invoer, retourneert CMD een correct, maar b = -858993460 Dit is wat ik al heb geprobeerd:
gebruik float of int in plaats van double, gebruik scanf_s, gebruik scanf(“%d of %f voor %i of %li of %lf of %e of %g ), gebruik fflush(stdin) om toetsenbordbuffer te wissen, lees in b eerst proberen zoals alle mogelijke combinaties.Ik ontdekte dat er een probleem is met de lengte van double op 32 bit OS, zodat je gedwongen bent scanf(“%lf”, &f) te gebruiken om een double in te lezen. Wat ik ook doe, de tweede waarde is altijd verkeerd.

Ik gebruik MS VS express 2012 voor desktop op Windows 7 32 bit OS.


Antwoord 1, autoriteit 100%

Gebruik de %lfformaatspecificatie om een dubbel te lezen:

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

Wikipedia heeft een fatsoenlijke referentievoor beschikbare formaatspecificaties.

U moet ook de indelingsspecificatie %lfgebruiken om de resultaten af te drukken:

printf("%lf %lf",a,b);

Antwoord 2, autoriteit 6%

Voor zover ik weet betekent %ddecadisch wat een getal is zonder komma. als je dubbele waarde wilt laden, gebruik dan %lfconversie (long float). voor printf zijn uw waarden om dezelfde reden verkeerd, %dwordt alleen gebruikt voor gehele getallen (en mogelijk tekens als u weet wat u doet) getallen.

Voorbeeld:

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

Antwoord 3, autoriteit 3%

U gebruikt een verkeerde opmaakvolgorde voor double, u moet %lfgebruiken in plaats van %ld:

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

Antwoord 4

Formaatspecificatie in printfmoet %fzijn voor doubldatatypes aangezien floatdatatyles uiteindelijk worden omgezet in doubledatatypes binnen printf.

Er is geen mogelijkheid om float-gegevens af te drukken. Vind de discussie hier: Correcte formaatspecificatie voor dubbel in printf


Antwoord 5

Gebruik deze regel code bij het scannen van de tweede waarde:
scanf(" %lf", &b);
vervang ook alle %ld door %lf.

Het is een probleem met de invoerstroombuffer. Je kunt ook fflush(stdin) gebruiken; na de eerste scan om de invoerbuffer te wissen en dan zal de tweede scanf werken zoals verwacht. Een alternatieve manier is om een getch(); of getchar(); functie na de eerste scanf-regel.


Antwoord 6

Het gebruik van %lfzal u helpen bij het oplossen van dit probleem.

Gebruik:

scanf("%lf",&doub)

Other episodes