很多小伙伴们在学习C语言时候,和贝蒂一样对于基础的printf和scanf函数容易出错,为了帮助大家更好的理解这两个函数,下面是贝蒂自己总结的printf和scanf的用法,希望能够对大家有所帮助哦~
printf()的作用就是把内容输出到屏幕上,f代表格式化(format),表示可以定制文本的输出内容,其源文件是stdio.h。
下面是常见的占位符,当然大家不需要全部记住哦,只需要记住常见的几个就可以啦~
这些都是一些常见的打印输出类型,需要大家可以对其熟练掌握。
下面是两种打印字符串的方式,为什么可以这样呢?因为参数部分传递的是首元素的地址哦,所以有没有提前用占位符%s声明,都是一样的哦~当然如果没有搞懂也没有关系,只需要先记住有这样打印的方式,随着知识的加深,慢慢咱们就能明白啦~
贝蒂说:“printf ()中参数与占位符的关系是一一对应的,如果有 n 个占位符, printf () 的参数就应该有 n + 1 个,因为前面格式化字符串也算一个参数。 如果参数个数少于对应的占位符, printf () 可能会输出内存中的任意值”。
从上述实例中,我们可以知道限定宽度是限定的最小的宽度,默认的右对齐。其中%12f表示至少占12位,由于小数会默认保留六位小数,小数点算一位,所以前面有三个空格.
只需要在百分号之后加一个正号。
贝蒂说:“这种写法可以和限定宽度结合使用哦~”
%s默认的是全部输出,如果用%.ns,其中n是个整数,表示输出的长度。
通过上面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
让我们再来做一道题巩固一下吧~
首先肯定会打印出hello!然后换行~
然后打印第一步的返回值,需要注意是‘\n’也是一个字符哦,所以返回值是7,换行
最后打印第二步的返回值,格式化字符串的‘\n’当然也算哦,所以打印出2.
贝蒂说 :“printf的返回值算是一个比较生僻的知识点,但是在面试题中经常出现,所以大家还是尽量要掌握哦~”
scanf的用法和printf的用法非常类似,但需要注意的就是scanf的参数部分输入的是地址哦~
并且输入内容需要和格式化内容一一对应。
如果说在格式化的两个%d之间加入',',会怎么样呢?~
从上述两个例子,我们就可以知道scanf输入的内容表示一致,否则就会出现错误~
首先就是scanf处理占位符时候,如果占位符不是%c,会忽略起始的空格(非起始的空格会停止),换行符,制表符也会被忽略。让我们看看下面这道题。
让贝蒂来为大家讲解一下为什么会出现这些结果呢~
上⾯⽰例中, scanf() 读取⽤⼾输⼊时,%d 占位符会忽略起⾸的空格,从 -处开始获取数据,读
取到 -13 停下来,因为后⾯的 . 不属于整数的有效字符。第⼆次调⽤ scanf() 时,就会从上⼀次停⽌解读的地⽅,继续往下读取。这⼀次读取的⾸字符是 . ,由于对应的占位符是 %f 读到.45e12 ,这是采⽤科学计数法的浮点数格式。后⾯的# 不属于浮点数的有效字符,所以会停在这⾥。至于为什么计算结果与预期结果相差一点,那是浮点数在内存中无法精确存储。后期贝蒂会为大家详细介绍哒~
scanf的返回值是一个整型,表示成功读取变量的个数,如果没有读取到任何数据,或匹配失败就会返回0,如果遇见文件的末尾(END OF FILE),返回EOF,表示-1。
贝蒂说:“在vs编译器之中,Ctrl+z回车重复三次会跳到文件的末尾,其他编译器一般只用按一次哦~”
我们可以利用scanf的返回值进行多组数据的输入,这个常用于各种刷题网站~
这一章贝蒂为大家详细给大家介绍了printf和scanf,希望能够帮助大家哦~