运行环境:VS2007 存在错误提示:C4996,原因是scanf存在内存泄漏的风险 措施进行预处理声明 #define _CRT_SECURE_NO_WARNINGS 如果想永远避免可以按下图操作
scanf的作用 将键盘输入的内容传递到对应的变量容器内(变量指向的地址) 因此scanf提供了基本类型的输入方式,且其读取方式由%d、%f、%lf、%c、%s决定,不同的符号会产生不同的效果。
1. 整型(四字节)
键盘输入是文本型输入,因此你可以随意输入,scanf碰到第一个非‘0-9’与空格的字符(空格不能出现在数据中)便退出读取。当输入的值的绝对值过大时会转换为无符号整型对4294967296进行求余后换算成相应的正负值
int a; scanf("%d", &a);//&a对a获取地址进行存储 printf("%d", a);2.单精度浮点型 键盘输入是文本型输入,因此你可以随意输入,scanf碰到第一个任意字符的便退出读取。小数点后面的零也会再指定位数截断。
float a; scanf("%f", &a); printf("%f", a);//获取a的存储地址3.字符型 键盘输入是文本型输入,因此你可以随意输入,scanf碰到第一个任意字符便退出读取。
char a; scanf("%c", &a); printf("%c", a);//获取a的存储地址大概率会出错,因为scanf是先将键盘输入的文本型数据根据转换说明转换为对应的数据类型,再去访问地址进行覆盖。这时候常常会出现地址错误。
关于scanf的一些特殊用法
设定输入中止符
char str[100]; scanf("%[^c]",str);//当输入'c'时中止输入 char str[100]; scanf("%[^0-9]",str);//当输入0-9任意一个字符时中止输入 char str[100]; scanf("%[0-9a-zA-Z]",str);//以特殊字符(非[]内字符)为中止输入符