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 %lf
formaatspecificatie om een dubbel te lezen:
double a;
scanf("%lf",&a);
Wikipedia heeft een fatsoenlijke referentievoor beschikbare formaatspecificaties.
U moet ook de indelingsspecificatie %lf
gebruiken om de resultaten af te drukken:
printf("%lf %lf",a,b);
Antwoord 2, autoriteit 6%
Voor zover ik weet betekent %d
decadisch wat een getal is zonder komma. als je dubbele waarde wilt laden, gebruik dan %lf
conversie (long float). voor printf zijn uw waarden om dezelfde reden verkeerd, %d
wordt 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 %lf
gebruiken in plaats van %ld
:
double a;
scanf("%lf",&a);
Antwoord 4
Formaatspecificatie in printf
moet %f
zijn voor doubl
datatypes aangezien float
datatyles uiteindelijk worden omgezet in double
datatypes 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 %lf
zal u helpen bij het oplossen van dit probleem.
Gebruik:
scanf("%lf",&doub)