float和double默认情况下都是有明确内部格式的,如果你格式不匹配数自然不对。你用%f给输入double,只会按float的格式填入double的低32位(没有一位数据能表示原本需要的意义),double的高32位会维持原来的未初始化数据(和你的输入无关)。
整型数据类型:int、short、long等 浮点型数据类型:float、double等 字符型数据类型:char 字符串类型:char数组、char指针 其他数据类型:可以使用格式控制符进行格式化输入,如%c、%d、%f等 需要注意的是,scanf_s函数需要指定输入的数据类型,如果输入的数据类型与指定的数据类型不匹配,可能会导致程序出错。
不过对于数字来讲是没有这个问题的,因为不管是int,long,float还是double,都规定有自己的取值范围,而不像字符类型,长度是由用户自行定义的。因此,在读取数字时,scanf_s函数不需要提供第三个参数。
scanf_s是scanf的安全版本,当输入数组、字符和数组时需要第三个参数表示缓冲区的大小,表示最多读取n-1个字符。在用VS2015进行C语言编程时,写输入函数不能写成scanf,而要写成scanf_s ANSI C中没有scanf_s(),只有scanf(),scanf()在读取时不检查边界,所以可能会造成内存访问越界,例如分配了5字节...
例如: double num; scanf_s("%lf", &num); 复制代码 上述代码表示从标准输入流中读取一个双精度浮点数,并将其赋值给变量num。 总结一下,scanf_s函数的使用方法和scanf函数类似,但是在读取字符串、字符和浮点数时有一些差别,需要根据具体的需求进行相应的格式控制符的设置。 0 赞 0 踩...
您输入的是:abcdefg 很多带“_s”后缀的函数是为了让原版函数更安全,传入一个和参数有关的大小值,避免引用到不存在的元素。 比如:char d[20];写成scanf_s("%s",d,20);才是正确的,有这个参数20使准确性提高。 ANSI C中没有scanf_s(),只有scanf(),scanf()在读取时不检查边界,所以可能会造成内存访问越界...
输入 double 数是 %lf 不是 %if。顺便说一句,强烈建议把 void main() 改成 int main(void),这...
doubleweight=242.5; printf("Enter a field width :\n"); scanf_s("%d",&width); printf("The number is:%*d:\n",width,number); printf("Now enter a width and a precision:\n"); scanf_s("%d%d",&width,&precision); printf("Weight = %*.*f\n",width,precision,weight); ...
scanf_s( ) --> 安全的scanf函数,第三个参数要加上最大获取多少个数据。char s[20];scanf("%s",s,20);例如:include <stdio.h> int main(){ double percent;scanf_s("%lf%%", &percent);printf("%lf",percent);return 0;} 输入:du4.5 输出:4.500000 在输入流中把%剔除了。
(1)printf的%f说明符既可以输出float型⼜可以输出double型。根据“默认参数提升”规则(在printf这样的函数的可变参数列表中,不论作⽤域内有没有原型,都适⽤这⼀规则)float型会被提升为double型。因此printf()只会看到双精度数。(2)scanf对于float类型必须⽤%f,double必须⽤%lf 对于scanf,情况就...