scanf()的使⽤及⼀些注意事项
相⽐较Java的键盘录⼊,C语⾔的scanf有⼀些需要注意的细节,为了避免使⽤的时候踩坑,我们就来了解⼀下scanf。
scanf()是C语⾔的格式输⼊函数,和printf函数⼀样被声明在stdio.h头⽂件中,它的基本使⽤很简单:
1int a;
2 scanf("%d",&a);//程序执⾏到这⾥时,就等待⽤户输⼊;它接收的是变量的地址
//所以⼀般情况下除了指针型变量和数组名要给变量加上取地址符&
注意事项⼀:内存溢出(输⼊的类型要和占位符⼀致就不拿出来单独啰嗦了)
1char s[1];//长度为1,只能存⼀个元素
2 printf("请输⼊s的值:");
3//因为这⾥使⽤的是数组名,数组名就是地址,所以不⽤加取地址符&
4 scanf("%s",s); //输⼊abcd
5 printf("s=%s\n",s);
诶,照结果来看abcd都被存进字符数组s⾥⾯了,但是我们知道,s是不是只能存⼀个字节的数据,所以bcd已经⾮法占⽤内存了。虽然有时候程序看起来会正常执⾏,但是它会留下⼀些隐患。使⽤的时候需要注意这⼀点。
注意事项⼆:录⼊多个变量
1double m,n;
2 printf("请输⼊m、n:");
3//占位符不写东西时,录⼊的时候默认以空格分隔
//如果占位符⽤逗号分隔,录⼊的时候⽤逗号分隔
4 scanf("%lf%lf",&m,&n);// scanf("%lf,%lf",&m,&n);
5 printf("n=%lf m=%lf\n",m,n);
如果我将第四⾏代码换成注释的代码就需要这样⽤:
输⼊的时候⽤空格分隔会发⽣什么呢
可以看到,n的值没能录⼊。建议使⽤默认的分隔符,占位符中不要⾃⼰加东西。
注意事项三:char类型
1char name[10]="";
2int age=0;
3double sal=0.0;
4char gender='a';//m代表man w代表woman
5
6 printf("请输⼊名字:");
7 scanf("%s",name);//数组名,不⽤加&c语言scanf能输入中文吗
8
9 printf("请输⼊年龄:");
先看⼀下去掉19
⾏代码会发⽣什么:
乱吧,性别没法输⼊吧;加上19
⾏之后,也就是再获取⼀次字符之后:
10 scanf("%d",&age);
11
12 printf("请输⼊薪⽔:");
13 scanf("%lf",&sal);
14
15 printf("请输⼊性别:");
16 //scanf 中char 类型会出现接收上⾯的回车字符,⼀个字节被占了,所以获取不到录⼊的数据 17 scanf("%c",&gender);
18 //所以再接收⼀次
19 scanf("%c",&gender);
20
21 printf("姓名:%s \n 年龄:%d \n 薪⽔:%lf \n 性别:%c",name,age,sal,gender);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论