C语言中用scanf输入双精度浮点数的源代码如下
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n, *a, i
printf("请输入数组长度:")
scanf("%d", &n)
a = malloc(sizeof(int) * n)/*分配内存*/
printf("请输入%d个数:\n", n)
for(i = 0i <ni++)
scanf("%d", a + i)
printf("您输入的数是:\n")
for(i = 0i <ni++)
printf("%d ", a[i])
free(a)/*释放内存*/
return 0
}
扩展资料
1、scanf()函数开始每次读取一个输入字符,它跳过空白字符直到遇到一个非空白字符。因为它试图读取一个整数,所以scanf()期望发现一个数字字符或者一个符号(+或-)。
2、如它发现了一个数字或一个符号,那么它就保存之并读取下一个字符。scanf()持续读取和保存字符直到它遇到一个非数字的字符。如遇到了一个非数字的字符,它就得出结论,它已经讲到了整数的尾部。
3、scanf()把这个非数字字符放回输入。这就意味着程序下一次开始读取输入时,它将从前面被放弃的那个非数字字符开始。最后,scanf()计算它读取到的数字的相应数值,并将该值放到指定的变量中。
C语言用scanf()函数输入双精度数据时,采用的数据格式参数必须是%lf,如:
double dscanf("%lf", &d )
scanf("%f,%f",&a,&b)不能输入双精度数据吗?
当然不能。主要原因在于double和float类型的大小不同:
double类型数据在内存中存储占8字节(64位),按IEEE754标准存储,格式为:1位符号位+11位指数位+52位小数位
float类型数据在内存中存储占4字节(32位),按IEEE754标准存储,格式为:1位符号位+8位指数位+23位小数位
当输入数据格式串为%f时,scanf()按float类型将输入的数据存储到内存地址中,这时,若再按double类型解释输出数据时,数据当然不是用户输入的内容了。