一、概述

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 函数 —— 基本的输入函数相关推荐

  1. scanf()函数的用法和实践

    scanf()函数的用法和实践 摘要: 本文阐述了基于ANSI,Win 95,Win NT上的 C/C++语言中scanf()函数的用法,以及在实际使用中常见错误及对策. 关键词: scanf() 一 ...

  2. scanf函数详解与缓冲区

    1.基本信息 函数原型: int scanf( char *format, args, ...); 函数返回值: 读入并赋给args的数据个数,遇到文件结束返回EOF,出错返回0. 函数功能: sca ...

  3. c语言scarf函数原型,scanf 函数原型.doc

    scanf 函数原型.doc scanf 函数原型 scanf 函数原型 int scanf( const char *format, ... ); scanf()函数是格式化输入函数,它从标准输入设 ...

  4. scanf函数具体解释与缓冲区

    1.基本信息 函数原型: int scanf( char *format, args, ...); 函数返回值: 读入并赋给args的数据个数.遇到文件结束返回EOF,出错返回0. 函数功能: sca ...

  5. C语言scanf函数详解和示例

    文章目录 一.数据输入 二.断章取义 三.scanf输入 1.输入整数 2.输入字符 3.输入浮点数 4.输入字符串 5.输入多个内容 6.示例(book13.c) 四.注意事项 五.获取视频教程 六 ...

  6. C语言scanf函数详细解释,[转载]C语言printf和scanf函数详细用法

    Printf和Scan函数的使用方法 一 printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出 信息.在编写程序时经常会用到此函数.printf()函数的调用格式为: prin ...

  7. C语言的scanf函数

    scanf函数 简介 scanf是 Scan Format 的缩写,意思是格式化扫描,也就是从键盘获得用户输入. scanf函数称为格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中. ...

  8. c语言添加输入函数吗,C语言scanf()函数下支持中文输入吗?

    C语言scanf()函数下支持中文输入吗? C语言scanf()函数下支持中文输入吗? 如果我编写一个程序,要求是先输入姓,再输入名,然后按照常姓名的方式排列出来,如果我需要输入中文该怎么办? 搜索更 ...

  9. C语言基础之--scanf函数

    写代码的时候,我们可以看得出,几乎每一个C程序都会包括输入输出.输入输出是程序中最基本的操作之一.C语言本身并不提供输入输出的语句,输入输出操作是由C标准函数库中的函数来实现的.今天就先说说输入:sc ...

最新文章

  1. 云炬随笔20211010(4)
  2. mac PHP集成开发工具(PhpStorm)
  3. nssl1256-C(盟主的忧虑)【并查集】
  4. java forkjoin 简书_ForkJoinPool in Java
  5. MFC中 CArray(template)的应用
  6. 51全志R58平台Android4.4下Camera的HAL层修改
  7. android 音乐游戏,手速党的胜利 -- 音乐游戏专题 #iOS #Android
  8. Highcharts基础教程(七):图例(Legend)
  9. 计算机组装检测与数据恢复,计算机检测维修与数据恢复.doc
  10. Qt入门使用Qt编写程序详细全过程
  11. 基于AD09的四层板设计概要
  12. 何凯明最新一作:Masked Autoencoders Are Scalable Vision Learners
  13. Linux下限制带宽的方法
  14. Git超详解七 储藏 (看不懂算我输)
  15. DPDK应用示例指南简介(汇总)
  16. 3dsmax渲染AVI格式动画的画面不清晰
  17. 通过drb集成java和ruby环境
  18. 计算机领域国际学术会议和期刊
  19. ibm服务器 产品型号对应表,IBM服务器配件型号及编号列表
  20. 异步处理,Event Souring,事务补偿,实现最终一致性和服务的弹性和批处理

热门文章

  1. c语言MB_HELP用法,help的用法说明
  2. TeamCity REST API
  3. Flink 读取 Kafka 消息并批量写入到 MySQL实例
  4. java孙膑和庞涓问题_庞涓VS孙膑——一个很难的数学问题(智力140以下勿进)
  5. 2.1数字音频基础知识
  6. 闲云旅游项目开发-(第二篇:实现登录功能,使用vuex的store管理数据)
  7. C#下生成CSR证书签名请求
  8. ca证书 csr_SSL证书CSR文件生成方式及注意事项
  9. 我不喜欢你了 你满意了么?伤感QQ日志
  10. 前台Autoform 选择下拉框的值进行判断(js)