我尝试使用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位操作系统。
使用%lf
格式说明读双:
double a;
scanf("%lf",&a);
维基百科有一个像样的参考可用的格式说明。
你需要使用%lf
格式说明打印出来的结果,以及:
printf("%lf %lf",a,b);
据我所知%d
装置十进制其数量而不小数点。 如果要加载双精度值,使用%lf
转换(长浮动)。 为您的printf值是错误的,同样的原因, %d
只用于整数(和可能的字符,如果你知道你在做什么)的数字。
例:
double a,b;
printf("--------\n"); //seperate lines
scanf("%lf",&a);
printf("--------\n");
scanf("%lf",&b);
printf("%lf %lf",a,b);
您正在使用错误的格式化顺序为double
,你应该使用%lf
代替%ld
:
double a;
scanf("%lf",&a);
在格式说明符printf
应该%f
为doubl
数据类型,因为float
datatyles最终转换为double
数据类型里面printf
。
没有规定打印float
数据。 请在这里找到的讨论: 正确的格式说明符printf中双