Reading in double values with scanf in c

匿名 (未验证) 提交于 2019-12-03 02:08:02

问题:

I try to read-in 2 values using scanf() in C, but the values the system writes into memory are not equal to my entered values. Here is the code:

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

If I enter 1 and 2, CMD returns a correct, but b = -858993460 Here is what I already tried: using float or int instead of double, using scanf_s, using scanf("%d or %f for %i or %li or %lf or %e or %g ), using fflush(stdin) to clear keyboard buffer, reading in b first, trying like all possible combinations. I found out that there is a problem with the length of double on 32 bit OS, so that you are forced to use scanf("%lf", &f) to read in a double. No matter what I do, second value is always wrong.

I use MS VS express 2012 for Desktop on Windows 7 32 bit OS.

回答1:

Use the %lf format specifier to read a double:

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

Wikipedia has a decent reference for available format specifiers.

You'll need to use the %lf format specifier to print out the results as well:

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


回答2:

As far as i know %d means decadic which is number without decimal point. if you want to load double value, use %lf conversion (long float). for printf your values are wrong for same reason, %d is used only for integer (and possibly chars if you know what you are doing) numbers.

Example:

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


回答3:

You are using wrong formatting sequence for double, you should use %lf instead of %ld:

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


回答4:

Format specifier in printf should be %f for doubl datatypes since float datatyles eventually convert to double datatypes inside printf.

There is no provision to print float data. Please find the discussion here : Correct format specifier for double in printf



回答5:

Using %lf will help you in solving this problem.

Use :

scanf("%lf",&doub) 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!