scanf 函数 —— 基本的输入函数
一、概述
scanf 函数和 printf函数 一样,用途广泛,其功能用一句话概括就是 “ 通过键盘给程序中的变量赋值 ” 。
二、用法(格式)
scanf 函数的两种用法,或者说两种格式如下:
1、 scanf( " 输入控制符 " ,输入参数); /* ----- 英文输入法输入 -----*/ 简单、常用用法
例如:scanf("%d", &i); /* &i 表示变量 i 的地址,&是取地址符 */
功能:将从键盘输入的字符转化为“ 输入控制符 ” 所规定格式的数据,然后存入以输入参数的值为地址的变量中。
“ 输入控制符 ” 和 “ 输出控制符 ” 是一模一样的。例如:一个整型数据,通过 printf 输出用 %d
输出,通过 scanf 输入时同样是用 %d
输入。
&是一个取地址运算符,&后面加变量名表示“该变量的地址”,所以&i就表示变量 i 的地址。&i
又称为“ 取地址i ”,就相当于将数据存入以变量 i 的地址为地址的变量中,也就是将数据存入变量i中。
综上所述:假如从键盘上输入字符 123,然后 %d
将这三个字符转化成十进制数 123,通过 “ 取地址 i ” 找到变量 i 的地址,再将数字 123 放到以变量 i 的地址为地址的变量中,即将数字 123 放到变量 i 中,所以最终的输出结果就是 i=123
。
或例如:scanf("%d%d", &i, &j); /*一次给多个变量赋值*/
注意:
1)、键盘输入数据给多个变量赋值时,赋的值之间一定要用空格、回车或者 Tab 键隔开,用以区分是给不同变量赋的值。其中空格、回车或 Tab 键的数量不限,只要有就行。一般都使用一个空格。
2)、scanf函数双引号内的多个 “ 输入控制符 ” 之间,千万不要加逗号。原因其一是:键盘输入时,逗号的数目容易出错;原因其二是:键盘输入时,中/英输入法容易混淆,会极大可能增加代码的出错率。
2、scanf( " 输入控制符非输入控制符 " , 输入参数); /* ----- 英文输入法输入 -----*/ 不建议使用
例如:scanf("i = %d", &i); /* &i 表示变量 i 的地址,&是取地址符 */
“ 非输入控制符 ” 就是除了“ 输入控制符 ” 的其他符号,例如: i=
。
综上所述:所有的 “ 非输入控制符 ” 在键盘上输入时都要原样输入,即键盘输入的时候 i=
必须要原样输入。例如:如果需要键盘输入给变量 i 赋值 123,那么必须在键盘上输入i=123
才正确,否则就是错误。
不建议使用原因:scanf函数中的“ 非输入控制符 ” 在键盘输入过程中,既累赘又麻烦,没必要多此一举。
所以在使用scanf函数时,务必记住 < 双引号内永远都不要加 “ 非输入控制符 ” >,只用 “ 输入控制符 ” ,即采纳用法(格式)1。
三、小结
1、scanf 的使用看似细节繁杂,但使用起来非常简单。就目前而言,只要掌握以下五点:
1)、在 scanf 的“输入参数”中,变量前面的取地址符&
不要忘记。
2)、scanf 函数 双引号内,除了“ 输入控制符 ”外什么都不要写,尤其是不要用 \n 。
3)、“ 输出控制符 ” 和 “ 输出参数 ” 无论在 “ 顺序上 ” 还是在 “ 个数上 ” 一定要一一对应。
4)、“ 输入控制符 ” 的类型和变量所定义的类型一定要一致。对于从键盘输入的数据的类型,数据是用户输入的,程序员是无法决定的,所以在写程序时要考虑容错处理。
5)、使用 scanf 函数之前先用 printf 函数提示输入。
2、关于缓冲区的理解:
在 scanf 函数中,从键盘输入的一切数据,不管是数字、字母,还是空格、回车、Tab 等字符,都会被当作数据存入缓冲区。存储的顺序是先输入的排前面,后输入的依次往后排。按下回车键的时候 scanf 开始进入缓冲区取数据,从前往后依次取。
如果 scanf 函数中仅有 %d ,则 scanf 函数只识别“十进制整数”。对 %d 而言,空格、回车、Tab 键都是区分数据与数据的分隔符。当 scanf 函数进入缓冲区中取数据的时候,如果 %d 遇到空格、回车、Tab 键,那么它并不取用,而是跳过继续往后取后面的数据,直到取到“十进制整数”为止。对于被跳过和取出的数据,系统会将它从缓冲区中释放掉。未被跳过或取出的数据,系统会将它一直放在缓冲区中,直到下一个 scanf 来获取。但是如果 %d 遇到字母,那么它不会跳过也不会取用,而是直接从缓冲区跳出。
如果将 %d 换成 %c,那么任何数据都会被当作一个字符,不管是数字还是空格、回车、Tab 键它都会取回。
四、实践问题总结
1、判断“等不等于”是“==”,赋值是“=”。
2、采用用法(格式)1的代码,其中 scanf 函数的“ 输入控制符 ”(%d)加没加空格隔开,当键盘输入字符时,都必须用空格、回车或者 Tab 键隔开。
3、采用用法(格式)2的代码,其中 scanf 函数的“ 非输入控制符 ”(a/b/c)前面必须加一个空格隔开,否则会出现刷屏结果。而当键盘输入字符时,都可以或不用空格、回车或者 Tab 键隔开。
scanf 函数 —— 基本的输入函数相关推荐
- scanf()函数的用法和实践
scanf()函数的用法和实践 摘要: 本文阐述了基于ANSI,Win 95,Win NT上的 C/C++语言中scanf()函数的用法,以及在实际使用中常见错误及对策. 关键词: scanf() 一 ...
- scanf函数详解与缓冲区
1.基本信息 函数原型: int scanf( char *format, args, ...); 函数返回值: 读入并赋给args的数据个数,遇到文件结束返回EOF,出错返回0. 函数功能: sca ...
- c语言scarf函数原型,scanf 函数原型.doc
scanf 函数原型.doc scanf 函数原型 scanf 函数原型 int scanf( const char *format, ... ); scanf()函数是格式化输入函数,它从标准输入设 ...
- scanf函数具体解释与缓冲区
1.基本信息 函数原型: int scanf( char *format, args, ...); 函数返回值: 读入并赋给args的数据个数.遇到文件结束返回EOF,出错返回0. 函数功能: sca ...
- C语言scanf函数详解和示例
文章目录 一.数据输入 二.断章取义 三.scanf输入 1.输入整数 2.输入字符 3.输入浮点数 4.输入字符串 5.输入多个内容 6.示例(book13.c) 四.注意事项 五.获取视频教程 六 ...
- C语言scanf函数详细解释,[转载]C语言printf和scanf函数详细用法
Printf和Scan函数的使用方法 一 printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出 信息.在编写程序时经常会用到此函数.printf()函数的调用格式为: prin ...
- C语言的scanf函数
scanf函数 简介 scanf是 Scan Format 的缩写,意思是格式化扫描,也就是从键盘获得用户输入. scanf函数称为格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中. ...
- c语言添加输入函数吗,C语言scanf()函数下支持中文输入吗?
C语言scanf()函数下支持中文输入吗? C语言scanf()函数下支持中文输入吗? 如果我编写一个程序,要求是先输入姓,再输入名,然后按照常姓名的方式排列出来,如果我需要输入中文该怎么办? 搜索更 ...
- C语言基础之--scanf函数
写代码的时候,我们可以看得出,几乎每一个C程序都会包括输入输出.输入输出是程序中最基本的操作之一.C语言本身并不提供输入输出的语句,输入输出操作是由C标准函数库中的函数来实现的.今天就先说说输入:sc ...
最新文章
- 云炬随笔20211010(4)
- mac PHP集成开发工具(PhpStorm)
- nssl1256-C(盟主的忧虑)【并查集】
- java forkjoin 简书_ForkJoinPool in Java
- MFC中 CArray(template)的应用
- 51全志R58平台Android4.4下Camera的HAL层修改
- android 音乐游戏,手速党的胜利 -- 音乐游戏专题 #iOS #Android
- Highcharts基础教程(七):图例(Legend)
- 计算机组装检测与数据恢复,计算机检测维修与数据恢复.doc
- Qt入门使用Qt编写程序详细全过程
- 基于AD09的四层板设计概要
- 何凯明最新一作:Masked Autoencoders Are Scalable Vision Learners
- Linux下限制带宽的方法
- Git超详解七 储藏 (看不懂算我输)
- DPDK应用示例指南简介(汇总)
- 3dsmax渲染AVI格式动画的画面不清晰
- 通过drb集成java和ruby环境
- 计算机领域国际学术会议和期刊
- ibm服务器 产品型号对应表,IBM服务器配件型号及编号列表
- 异步处理,Event Souring,事务补偿,实现最终一致性和服务的弹性和批处理