贝蒂手撕printf和scanf哦~

 前言:

         很多小伙伴们在学习C语言时候,和贝蒂一样对于基础的printf和scanf函数容易出错,为了帮助大家更好的理解这两个函数,下面是贝蒂自己总结的printf和scanf的用法,希望能够对大家有所帮助哦~

1.printf~

   1.1printf的基本用法  

    printf()的作用就是把内容输出到屏幕上,f代表格式化(format),表示可以定制文本的输出内容,其源文件是stdio.h。

    1.2占位符

     下面是常见的占位符,当然大家不需要全部记住哦,只需要记住常见的几个就可以啦~

贝蒂手撕printf和scanf哦~_第1张图片

贝蒂手撕printf和scanf哦~_第2张图片

       这些都是一些常见的打印输出类型,需要大家可以对其熟练掌握。

    下面是两种打印字符串的方式,为什么可以这样呢?因为参数部分传递的是首元素的地址哦,所以有没有提前用占位符%s声明,都是一样的哦~当然如果没有搞懂也没有关系,只需要先记住有这样打印的方式,随着知识的加深,慢慢咱们就能明白啦~

贝蒂手撕printf和scanf哦~_第3张图片

    贝蒂说:“printf ()中参数与占位符的关系是一一对应的,如果有 n 个占位符, printf () 的参数就应该有 n + 1 个,因为前面格式化字符串也算一个参数。 如果参数个数少于对应的占位符, printf () 可能会输出内存中的任意值”。

    1.3 限定格式

     (1)限定宽度

贝蒂手撕printf和scanf哦~_第4张图片

贝蒂手撕printf和scanf哦~_第5张图片

     从上述实例中,我们可以知道限定宽度是限定的最小的宽度,默认的右对齐。其中%12f表示至少占12位,由于小数会默认保留六位小数,小数点算一位,所以前面有三个空格. 

        (2)总是显示正负号

  只需要在百分号之后加一个正号。

贝蒂手撕printf和scanf哦~_第6张图片

   (3)限制小数位数

    贝蒂说:“这种写法可以和限定宽度结合使用哦~”

    (4) 限定字符串的输出

  %s默认的是全部输出,如果用%.ns,其中n是个整数,表示输出的长度。

贝蒂手撕printf和scanf哦~_第7张图片

  1.4printf的返回值

   通过上面printf的格式,知道其返回值是个整型int,具体返回的就是格式化的字符串中字符个数,可能描述得比较抽象,下面我们通过题来为大家详细介绍~

    让我们详细来看看这道题吧~

    首先肯定会执行最里面的printf("%d",43),在屏幕上打印出43

    然后执行printf("%d", printf("%d", 43)),相当于打印第一个printf的返回值,‘4’,‘3’有两个字符,所以返回值是2.

    最后同理执行printf("%d", printf("%d", printf("%d", 43))),即打印第二步的‘2’返回值,一个字符,返回值为1.

    所以屏幕上最后打印的就是4321

贝蒂手撕printf和scanf哦~_第8张图片

    让我们再来做一道题巩固一下吧~

贝蒂手撕printf和scanf哦~_第9张图片

    首先肯定会打印出hello!然后换行~

    然后打印第一步的返回值,需要注意是‘\n’也是一个字符哦,所以返回值是7,换行

    最后打印第二步的返回值,格式化字符串的‘\n’当然也算哦,所以打印出2.

     贝蒂说 :“printf的返回值算是一个比较生僻的知识点,但是在面试题中经常出现,所以大家还是尽量要掌握哦~”

2.scanf~

    2.1scanf的基本用法

贝蒂手撕printf和scanf哦~_第10张图片

     scanf的用法和printf的用法非常类似,但需要注意的就是scanf的参数部分输入的是地址哦~

并且输入内容需要和格式化内容一一对应。

贝蒂手撕printf和scanf哦~_第11张图片

     如果说在格式化的两个%d之间加入',',会怎么样呢?~

贝蒂手撕printf和scanf哦~_第12张图片

贝蒂手撕printf和scanf哦~_第13张图片

    从上述两个例子,我们就可以知道scanf输入的内容表示一致,否则就会出现错误~

 2.2scanf的关键知识

    首先就是scanf处理占位符时候,如果占位符不是%c,会忽略起始的空格(非起始的空格会停止),换行符,制表符也会被忽略。让我们看看下面这道题。

贝蒂手撕printf和scanf哦~_第14张图片

    让贝蒂来为大家讲解一下为什么会出现这些结果呢~

    上⾯⽰例中, scanf() 读取⽤⼾输⼊时,%d 占位符会忽略起⾸的空格,从 -处开始获取数据,读
取到 -13 停下来,因为后⾯的 . 不属于整数的有效字符。第⼆次调⽤ scanf() 时,就会从上⼀次停⽌解读的地⽅,继续往下读取。这⼀次读取的⾸字符是 . ,由于对应的占位符是 %f 读到.45e12 ,这是采⽤科学计数法的浮点数格式。后⾯的# 不属于浮点数的有效字符,所以会停在这⾥。至于为什么计算结果与预期结果相差一点,那是浮点数在内存中无法精确存储。后期贝蒂会为大家详细介绍哒~

 2.3scanf的返回值~

   (1)scanf返回值的介绍

   scanf的返回值是一个整型,表示成功读取变量的个数,如果没有读取到任何数据,或匹配失败就会返回0,如果遇见文件的末尾(END OF FILE),返回EOF,表示-1。

贝蒂手撕printf和scanf哦~_第15张图片

贝蒂手撕printf和scanf哦~_第16张图片

贝蒂手撕printf和scanf哦~_第17张图片

      贝蒂说:“在vs编译器之中,Ctrl+z回车重复三次会跳到文件的末尾,其他编译器一般只用按一次哦~” 

(2) scanf返回值的使用

     我们可以利用scanf的返回值进行多组数据的输入,这个常用于各种刷题网站~

贝蒂手撕printf和scanf哦~_第18张图片

 结言:

         这一章贝蒂为大家详细给大家介绍了printf和scanf,希望能够帮助大家哦~

你可能感兴趣的:(C语言学习,c语言)