相比较Java的键盘录入,C语言的scanf有一些需要注意的细节,为了避免使用的时候踩坑,我们就来了解一下scanf。

  scanf()是C语言的格式输入函数,和printf函数一样被声明在stdio.h头文件中,它的基本使用很简单:

 int a;
scanf("%d",&a);//程序执行到这里时,就等待用户输入;它接收的是变量的地址
          //所以一般情况下除了指针型变量和数组名要给变量加上取地址符&

注意事项一:内存溢出(输入的类型要和占位符一致就不拿出来单独啰嗦了)

     char s[];//长度为1,只能存一个元素
printf("请输入s的值:");
//因为这里使用的是数组名,数组名就是地址,所以不用加取地址符&
scanf("%s",s); //输入abcd
printf("s=%s\n",s);

诶,照结果来看abcd都被存进字符数组s里面了,但是我们知道,s是不是只能存一个字节的数据,所以bcd已经非法占用内存了。虽然有时候程序看起来会正常执行,但是它会留下一些隐患。使用的时候需要注意这一点。

注意事项二:录入多个变量

     double m,n;
printf("请输入m、n:");
//占位符不写东西时,录入的时候默认以空格分隔
    //如果占位符用逗号分隔,录入的时候用逗号分隔
scanf("%lf%lf",&m,&n);// scanf("%lf,%lf",&m,&n);
printf("n=%lf m=%lf\n",m,n);

如果我将第四行代码换成注释的代码就需要这样用:

输入的时候用空格分隔会发生什么呢

可以看到,n的值没能录入。建议使用默认的分隔符,占位符中不要自己加东西。

注意事项三:char类型

     char name[]="";
int age=;
double sal=0.0;
char gender='a';//m代表man w代表woman printf("请输入名字:");
scanf("%s",name);//数组名,不用加& printf("请输入年龄:");
scanf("%d",&age); printf("请输入薪水:");
scanf("%lf",&sal); printf("请输入性别:");
//scanf中char类型会出现接收上面的回车字符,一个字节被占了,所以获取不到录入的数据
scanf("%c",&gender);
//所以再接收一次
scanf("%c",&gender); printf("姓名:%s \n年龄:%d \n薪水:%lf \n性别:%c",name,age,sal,gender);

先看一下去掉19行代码会发生什么:

乱吧,性别没法输入吧;加上19行之后,也就是再获取一次字符之后:

最新文章

  1. jquery Mobile弹出窗
  2. 在做excel导出时如何将excel直接写在输出流中
  3. Write operations are not allowed in read-only mode
  4. WebService《JavaEE6权威指南 基础篇第4版》
  5. Webstorm2016激活码[ 转]
  6. php 多维数组转换
  7. CodeForces 595B
  8. android 屏幕适配1 ——dimens.xml的适配
  9. HDU 5727 Necklace(二分图匹配)
  10. 《代码的第一行——Android》封面诞生
  11. 设置gridcontrol的焦点行
  12. GitHub的实践
  13. 一分钟搭建Vue2.0+Webpack2.0多页面项目
  14. Socket层实现系列 — 睡眠驱动的同步等待
  15. #Java学习之路——基础阶段(第四篇)
  16. leetcode — palindrome-partitioning-ii
  17. spring mvc后端校验validator
  18. 前端常用长度单位(px,em,rem,pt)介绍
  19. 解决rpm conflicts with file from package的两个方法
  20. Python2.7-logging模块

热门文章

  1. 5.7之sql_model
  2. 在使用vue+webpack模版创建的项目中使用font-awesome
  3. 7——PHP选择结构
  4. 用mpvue写个玩意儿玩玩
  5. JZOJ 1349. 最大公约数 (Standard IO)
  6. RabbitMQ 消息模式
  7. vue环境搭建过程中,npm权限不足问题
  8. API服务版本控制 Microsoft.AspNetCore.Mvc.Versioning
  9. ubuntu16.04 + caffe + SSD + gpu 安装
  10. CSS BEM 命名方式