scanf的使用
运行环境: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的存储地址
当转换说明(%d、%c…)与后面的存储变量类型不对应时
大概率会出错,因为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);//以特殊字符(非[]内字符)为中止输入符