读双值在C scanf函数(Reading in double values with scanf

2019-06-21 16:13发布

我尝试使用C中的scanf()读取-2倍的值,但系统写入到存储器中的值不等于我输入的值。 下面是代码:

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

如果我输入1和2,CMD返回正确的,但B = -858993460以下是我已经尝试过:使用浮动或INT的双重替代,使用scanf_s,使用的scanf(“%d或%F为%I或%礼或%LF或%e或%克),使用fflush(标准输入)来清除键盘缓冲区,读取在b首先,试图像的所有可能的组合。我发现存在与双32位操作系统的长度的问题,让你不得不使用的scanf(“%LF”,&F)在双阅读。不管我做什么,第二个值永远是错的。

我使用MS VS表示2012年桌面上的Windows 7 32位操作系统。

Answer 1:

使用%lf格式说明读双:

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

维基百科有一个像样的参考可用的格式说明。

你需要使用%lf格式说明打印出来的结果,以及:

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


Answer 2:

据我所知%d装置十进制其数量而不小数点。 如果要加载双精度值,使用%lf转换(长浮动)。 为您的printf值是错误的,同样的原因, %d只用于整数(和可能的字符,如果你知道你在做什么)的数字。

例:

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


Answer 3:

您正在使用错误的格式化顺序为double ,你应该使用%lf代替%ld

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


Answer 4:

在格式说明符printf应该%fdoubl数据类型,因为float datatyles最终转换为double数据类型里面printf

没有规定打印float数据。 请在这里找到的讨论: 正确的格式说明符printf中双



Answer 5:

使用%lf将帮助您解决这个问题。

使用 :

scanf("%lf",&doub)


文章来源: Reading in double values with scanf in c