scanf函数使用方法详解

  • 一.scanf函数是什么?
  • 二.scanf函数的作用
  • 三.注意事项
    • 1.输入数据
    • 2.%c
  • 四.字段宽度
  • 五.scanf函数的返回值

一.scanf函数是什么?

1.首先我们需要知道,scanf函数是一种格式化输入函数(按照格式字符串的格式,从键盘上把数据输入到指定的变量之中)

C语言中格式字符串的一般形式为: %[标志][输出最小宽度][.精度][长度]类型, 其中方括号[]中的项为可选项。

平时我们使用的最多的就是% + 类型。

二.scanf函数的作用

scanf函数是一种格式化输入函数,它的作用便是通过我们的键盘将输入字符转换成我们需要的类型

在这里需要注意,从键盘上输入的都是字符列如我们输入的是数字123,其实是字符‘1’, ‘2’, ‘3’。 为什么呢?

操作系统内核就是这样运作的。操作系统在接收键盘数据时都将它当成字符来接收的。这时就需要用“输入控制符”将它转化一下。%d的含义就是要将从键盘输入的这些合法的字符转化成一个十进制数字。经过 %d 转化完之后,字符 123 就是数字 123 了

 int i = 10;scanf("%d", &i);  //输入的是字符123,转化为数字123

三.注意事项

1.输入数据

1. 通常,在调用 scanf()函数时,格式化字符串只包含转换说明(类型的转换)
如果不是,那么格式化字符串中除转换说明与空白符以外的其他所有字符,必须与输入源对应位置的字符完全一致。否则 scanf()函数就会终止处理,并将不匹配的字符放回到缓冲区中下一个转换字符将会从该字符开始。

此时,若我们输入的是10,i依旧为零,因为在输入时我们并没有输入 i=10, 而是直接输入10,此时缓冲区里只有10,scanf从缓冲区里读数据时并没有i 于是便终止处理了,因此 i = 0没有被改变

但是此时字符1和字符0依旧在缓冲区中,于是gets函数就将它读走了,然后输出。


此时我们输入 i=10,此时打印i就是10,然后换行了,这是为什么?
因为在我们输入i=10后按了回车,相当于在向缓冲区内输入(\n),之后输入字符串时,被gets函数读走,然后输出了。

此时想要解决很简单,只需要将\n读走就可以了,在这里我们可以使用getchar();

注意:此处此处只是举个栗子,在输入时我们一般都不会包含除转换说明之外的其他字符,否则很容易出现BUG。

2.%c

 char s = 0;scanf("%c", &s); //此时输入 空格c 将会输出什么printf("%c\n", s);

最后会输出,空格 然后换行,此时缓冲区内有,c和\n

那要是%d 或者 %f 呢?

此时我们发现除了 %c 之外的类型说明都会都会忽略前面的空白字符(whitespace character)(空格, 回车,tab符等)。

四.字段宽度

字段宽度是十进制整型正数,它指定了对于给定的转换说明,scanf()所读取字符的最大数量。对于字符串输入来说,字段宽度可以防止缓冲区出现溢出情况


此时,缓冲区内还有数字4 和 \n。

五.scanf函数的返回值

1. scanf()函数的返回值是成功存储数据项的数量

如果一切执行顺利,返回值就是转换说明的数量(但不计包含星号的转换说明)。如果发生读取错误或在转换数据项前就到达了输入源尾部,则 scanf()函数会返回值 EOF.

scanf函数使用方法详解相关推荐

  1. python中累加函数_对Python实现累加函数的方法详解

    对Python实现累加函数的方法详解 发布时间:2020-10-26 00:02:44 来源:脚本之家 阅读:120 作者:岚漾忆雨 这个需求比较奇怪,要求实现Sum和MagaSum函数,实现以下功能 ...

  2. c语言memset函数用法,C语言memset函数使用方法详解

    C语言memset函数使用方法详解 一.函数原形   void *  memset(void*s, int ch,size_t n) 二.函数作用  将以s内存地址为首的连续n个字节的内容置成ch,一 ...

  3. c语言memset函数作用,C语言memset函数使用方法详解

    C语言memset函数使用方法详解 一.函数原形   void *  memset(void*s,int ch,size_t n) 二.函数作用  将以s内存地址为首的连续n个字节的内容置成ch,一般 ...

  4. Python的hasattr() getattr() setattr() 函数使用方法详解

    Python的hasattr() getattr() setattr() 函数使用方法详解 (一) hasattr(object,name) 函数 判断一个对象里面是否有 name 属性或者 name ...

  5. php 匿名方法,PHP基于Closure类创建匿名函数的方法详解

    本文实例讲述了PHP基于Closure类创建匿名函数的方法.分享给大家供大家参考,具体如下: Closure 类 用于代表匿名函数的类. 匿名函数(在 PHP 5.3 中被引入)会产生这个类型的对象. ...

  6. pythonsuper用法_python super函数使用方法详解

    一.super函数简介 python内置函数super()主要用于类的多继承中,用来查找并调用父类的方法,所以在单重继承中用不用 super 都没关系:但是,使用 super() 是一个好的习惯.一般 ...

  7. java调用其他程序吗_java本地方法如何调用其他程序函数,方法详解

    JNI是Java Native Interface的缩写,中文为JAVA本地调用.从Java 1.1 开始,Java Native Interface (JNI)标准成为java平台的一部分,它允许J ...

  8. EXCEL中sum、sumif、sumifs、if、subtotal、vlookup、match、index函数使用方法详解。

    文章讲述了数据分析中会用到的相关函数的实际应用场景,有需要的朋友可以参考. 一.求和函数 1.sum函数 功能:可以求固定区域.某列.某行的和 题目:数据源为1-8月各门店信息表,计算1-8月月份各门 ...

  9. [转载] python hasattr函数_Python的hasattr() getattr() setattr() 函数使用方法详解

    参考链接: Python hasattr() hasattr(object, name) 判断一个对象里面是否有name属性或者name方法,返回BOOL值,有name特性返回True, 否则返回Fa ...

最新文章

  1. python html 语法高亮,在Python中使用doxygen样式文档字符串的Vim语法高亮显示
  2. 简单介绍android studio中的Logcat
  3. Google Apps – Framework, Phonesky, GmsCore w/ AOSP Build.
  4. 当SRS遇到K8s:如何构建海量推流源站?
  5. C++泛型编程实现哈希表(开散列法)
  6. Spring Boot整合Thymeleaf模板引擎
  7. SAS宏技术中,%let和call symput有什么区别?
  8. python切割图像,使用Python图像库将一个图像切割成多个图像
  9. 启动metabase_引入开源BI软件Metabase——数据分析平台建设(一)
  10. 【华为云技术分享】《跟唐老师学习云网络》 - Bridge网桥
  11. 中望3d快捷键命令大全_cad快捷键命令大全
  12. WORDNET与HOWNET之比较
  13. [Android] 百度地图API Android相关配置教程(包含获取包名、发布版SHA1和开发版SHA1)
  14. 后台获取用户登录信息
  15. 计算机广东大专院校排名2018,重磅!广东85所专科院校官方排名刚刚出炉,这所高职回归第一!...
  16. 任务一: SpringMVC基本应用
  17. 通过谷歌chrome我们可以进行视频通话
  18. 2020年中兴捧月算法大赛---埃德加考特派赛题解析及代码
  19. Leaflet使用介绍
  20. 人工智能导论实验2——野人渡河黑白棋问题

热门文章

  1. Linux应用层例程3 输入设备应用编程
  2. JDK8函数式编程快速入门干货
  3. cpp 读写word的库
  4. OpenCV人脸检测与简单的距离计算
  5. linux的常见命令解析
  6. Slan 士兰微SC32F5664 通过串口IAP,实现OTA
  7. Python很难学?大佬推荐超级详细的Python爬虫学习清单,免费教程
  8. Shellshock漏洞回顾与分析测试
  9. 给windows7原版ISO添加usb3驱动
  10. 快速了解 photoshop 快捷键