scanf()函数的介绍
scanf()函数的介绍
1、scanf()函数的功能一句话概括就是:通过键盘给程序中的变量赋值
2、两种格式
scanf("输入控制符”,输入参数);
功能:将从键盘输入的字符转化为“输入控制符”所规定格式的数据,然后存入以输入参数的值为地址的变量中。
例子:
#include <stdio.h>int main(void){int i;scanf("%d",&i);//&i表示变量i的地址,&是取地址符printf("i = %d\n",i);return 0;}
注意:我们从键盘输入的全部都是字符。
- 比如输入的123,其实是字符‘1’,‘2’,‘3’。
- 操作系统在接收键盘数据时都将它当成字符来接收的,这时就需要用“输入控制符”将它转化一下;
- %d的含义就是要将从键盘输入的这些合法的字符转化成一个十进制经%d转化后,字符123就是数字123了。
- &i:表示变量i的地址,又称“取地址i”,相当于将数据存入以变量i的地址为地址的变量中,也就是变量i。
综上:scanf语句的意思就是:从键盘输入字符123,然后%d将这三个字符转化为十进制数123,最后通过“取地址i”找到变量i的地址,再将数字123放到以变量i的地址为地址的变量中, 即变量i中,所以最终的输出结果是i=123。
scanf(“输入控制符非输入控制符”,输入参数);
例子:
#include <stdio.h> int main(void) {int i;scanf("i = %d",&i);printf("i = %d\n",i);return 0; }
注释:
在printf中,所有的“非输出控制符”都要原样输出,同样,在scanf中,所有的“非输入控制符”也要原样输入,所以在输入的时候i= 必须要原样输入。上面例子从键盘给变量i赋值123,要输入i=123才正确,少一个都不行,否则就是错误。所以在scanf中%d后面没有必要加\n,因为在scanf中\n不起换行作用,不仅不起作用还需要原样输入一遍。
注意:所以在scanf的使用中一定要记住:双引号内永远不要加“非输入控制符”,除了“输入控制符”外,什么都不要加,否则是自找麻烦。
3、一次给多个变量赋值
例子:
#include <stdio.h> int main(void) {int i, j;scanf("%d%d",&i, &j);printf("i = %d, j = %d\n", i, j);return 0;}
scanf中双引号内除了“输入控制符”外不要加任何“非输入控制符”,通过键盘给多个变量赋值与给一个变量赋值是一样的。比如:两个变量赋值就写两个%d,然后对应写两个“取地址变量”,三个变量赋值就写三个%d,然后对应写三个“取地址变量”。
注意:虽然 scanf 中没有加任何“非输入控制符”,但是从键盘输入数据时,给多个变量赋的值之间一定要用空格、回车或者 Tab 键隔开,用以区分是给不同变量赋的值。而且空格、回车或 Tab 键的数量不限,只要有就行。一般都使用一个空格。
此外强调:当用scanf从键盘给多个变量赋值时,scanf中双引号内多个“输入控制符”之间千万不要加逗号“,”。多个“输入控制符”之间添加逗号在实际编程中这种写法是绝对不允许的,原因有两个:
- 首先逗号要原样输入的,有几个就要输入几个,少一个或多一个都不行。
- 其次,最主要的原因是输入法的问题,在scanf中是在英文输入法下写的逗号,如果输入的时候是中文输入法也是错的,所以用逗号很容易出错。
4.使用scanf的注意事项
参数的个数一定要对应
“输入控制符”和“输入参数”无论在“顺序上”还是在“个数上”,一定要一一对应。
例如: scanf("%c%d", &ch); ——错误的格式
输入的数据类型一定要与所需要的数据类型一致。
在printf中“输出控制符”的类型可以与数据的类型不一致,如:
int i = 97;
printf(“i = %c\n”,i);
但是在scanf中,对于从键盘输入的数据的类型、scanf中“输入控制符”的类型、变量所定义的类型,这三个类型要一致,否则会出错。
如: int i;
scanf("%d",&i);
printf(“i = %d\n”,i);
从键盘输入a a为字符型 不是整型 所以是错误的。按回车键时scanf开始进入缓冲区取数据,从前往后依次取;scanf中%d只识别“十进制整数”,对==%d而言,空格,回车,Tab键都是区分数据与数据的分隔符==。
如果%d遇到字母,不会跳过也不会取用,而是直接从缓冲区跳出。
如果将%d换成%c,那么任何数据都会被当做一个字符,不管是数字还是空格,回车,Tab键它都会取回。
使用==%c时==,输入变量全部输入完毕后再按回车,数据与数据之间不要按回车。
如果使用%d时,输入1 a 2,由于a是字符不会被取出,并且挡在2的前面,所以后面的2也无法取到,这时需要先将a弄走,也就是需要“清空缓冲区”。
5.在使用scanf之前使用printf提示输入
在使用scanf之前,最好用printf提示用户以什么样的方式输入。
如:
int i, j;
printf(“请输入两个值,中间以空格分隔:”);
scanf("%d%d", &i, &j);
printf(“i = %d, j = &d\n”, i, j);
6.小结
- 在scanf的“输入参数”中,变量前面的取地址符&不要忘记。
- scanf中双引号内,除了“输入控制符”外什么都不要写。
- “输出控制符”和“输出参数”无论在“顺序上”还是在“个数上”一定要一一对应,输入控制符也同样。
- “输入控制符”的类型和变量所定义的类型一定要一致。
(对于从键盘输入数据的类型是用户输入的,程序员是无法决定的,所以在写程序时要考虑容错处理) - 使用scanf之前先用printf提示输入。
scanf()函数的介绍相关推荐
- Scanf函数的介绍与使用及特殊形式(C语言)
一.介绍: 关于介绍我们可以看一下百度百科的定义:scanf()是C语言中的一个输入函数.与printf函数一样,都被声明在头文件stdio.h里,因此在使用scanf函数时要加上#include & ...
- C语言中的scanf()函数介绍
1.scanf函数:读取从键盘输入的数据 在C语言中,有多个函数可以从键盘获得用户输入: scanf():和 printf() 类似,scanf() 可以输入多种类型的数据 getchar().get ...
- scanf 接收 空格 输入_你需要知道的scanf函数用法
scanf函数 上一节中我们讨论了,如何将整数,浮点数,字符串打印到屏幕上去.既然有输出,怎么能没有输入呢?这一节中,我们来介绍与printf相反的scanf函数. scanf的功能是将键盘输 ...
- C语言scanf函数详解
函数名: scanf 功 能: 运行格式化输入 用 法: int scanf(char *format[,argument,...]); scanf()函数是通用终端格式化输入函数,它从标准输入设 ...
- scanf函数、冒泡排序和不定长度数组的使用 —— malloc
环境:win10 + VS2019 目录 1 scanf函数理解 1.1 VS中scanf函数报错 1.2 scanf函数介绍 1.2.1 简介 1.2.2 转换说明 1.2.3 读取缓冲区数据 ...
- scanf()函数详解
scanf()函数是所有C语言学习者在学习C语言过程中所遇到的第二个函数(第一个函数是printf(),Brian W.Kerninghan & Dennis M.Ritchie的" ...
- C语言scanf函数用法详细解释!!!
函数名: scanf 功 能: 执行格式化输入 用 法: int scanf(char *format[,argument,...]); scanf()函数是通用终端格式化输入函数,它从标准输入设 ...
- C语言源文件名为什么无效,scanf函数,想说输入不容易!----小话c语言(3)
Q: 前面是关于输出的,给个关于输入的代码吧. A: 如下: #include int main() { int i; scanf("%d", &i); printf(&q ...
- c语言中字符串输入格式错误的是什么,C语言中scanf函数格式化错误输入问题
好久都么写文章了,一直忙着做课程设计,感觉有些懒了.今天实验室一个同学问到了这样一个问题. 函数名: scanf功 能: 执行格式化输入 用 法: int scanf(char *format[,ar ...
最新文章
- Captaris Workflow 6.0 EventService 执行效率低下的排除。
- 一种在注入进程中使用WTL创建无焦点不在任务栏出现“吸附”窗口的方法和思路
- php v-for=,Vue中v-for循环节点的实现代码
- const 常量_条款03:尽可能使用const
- HDU4536+DFS
- OpenCV单目视觉定位(测量)系统
- wordpress主题实现彩色标签云效果
- 计算字符串长度(英文占1个字符,中文汉字占2个字符)
- 书店购物车--增删改
- Matlab显示无法解析,MatLab和AMEsim联合编译的时候出现【无法解析的外部符号】问题...
- leetcode-SQL-1148. 文章浏览 I
- 2014-07-23 .NET实现微信公众号接入
- 工作用哪个邮箱好用?好用的办公邮箱让你放假无烦恼
- 卸载Resharper
- echarts 桑基图sankey
- NZT 关于触动精灵 扫码无法识别 NZT提示202
- 2013智能卡相关行业前景
- C89 和 C99 标准比较
- 分享几个精美的个人简历模板,非常不错的简历,docx格式的可直接修改。
- 修复win10的更新服务器,修复win10系统更新steam发生错误提示“无法连接服务器”的教程步骤...
热门文章
- 浙江省计算机单考单招分数线 2011,浙江:2011年高考录取分数线发布 理科一本550分...
- C语言——不能被4整除的偶数——魔方阵
- 该严惩讹诈好人的恐怖老太吗?
- hdu 4022 Bombing
- 每天一个linux命令(70):objdump 命令
- java csr 证书_Java bouncycastle API 创建 CSR 和签发证书
- 什么是IP 欺骗以及如何防范?
- 2020资料员-通用基础(资料员)考试题库及资料员-通用基础(资料员)模拟考试系统
- SQL数据库开发笔记
- alin的学习之路(Linux系统编程:一)(Linux基础命令)