鹏哥C语言集训营笔记(1)printf和scanf函数

printf函数

·什么是printf:

将printf拆开来:print(打印)+format(格式;格式化),顾名思义printf函数是按照指定的格式打印数据的。

·怎么用printf:

1.printf的使用需要用到头文件#include<stdio.h>

2.printf可以加换行符

,则输出的结果将会变成: ( \n起到换行的效果,想在哪里换行,就在添加\n)

 3.printf可以使用占位符。

(PS:占位符,如%d,%s,特点是第一个字符一定是%,第二个字符表示展占位符的类型,可以被其他值代替)

常用占位符有:%d:十进制整数;%c:代入字符;%f:代入小数;%s代入字符串;%zd:size_t类型。如:

 当然,第一句的3也可以用字符串来表示:

 输入的内容中,可以含有多个占位符,但是是按照顺序依次排的

4.printf可以定制占位符的输出格式:
a.%+数字+d:限制最小宽度。

 b.正负号可以控制左右对齐

c.printf()总是显示正负号

在默认情况下,printf()不对正数显示+号,只对负数显示-号,如果想让正数也输出+号,可以在占位符的%后加一个+(其实前面也可以)。

 d.限定小数位数

输出小数时,有时希望限定小数位数,如:只想保留两位小数,就可以通过将占位符写成 %.2f 的形式来实现:

 如果将限制最小位数和限定小数位数放在一起使用,我们可以得到:

 同时,最小宽度和小数位数这两个限定值都可以用*号来替代,通过printf()的参数传入,如:

 e.输出部分字符串

同理,%s可以输出字符串,默认为全部输出。但是如果只想要输出开头的部分,可以用 %.[m]s 指定输出的长度,其中[m]代表一个数字,表示输入的长度,如:

 scanf函数

·什么是scanf

当我们有了变量,我们需要给变量输入值就可以使用scanf函数了,如:

但奇怪的是,往往这么打进去的代码系统会报错:

 这句话的意思是:系统认为,scanf函数不安全,考虑使用scanf_s来代替,

若想要这个错误描述失效的话,请使用 _CRT_SECURE_NO_WARNINGS 

说人话就是,要在开头最前面加上一行:#define _CRT_SECURE_NO_WARNINGS ,这样出来的结果就是:

 当我们输入成绩,就会跳出“成绩为100”。

或者我们使用scanf_s来代替,也可以正常运行:

 但scanf_s是VS这个IDE提供的,不是C语言标准库中的函数,所以,如果我们使用了scanf_s这个函数,那么我们的代码在其他的编译器上是不能通过的编译的,使得代码降低了可移植性,因此往往使用第一种,即在第一行加上#define _CRT_SECURE_NO_WARNINGS 

·怎么用scanf

1.scanf()函数用于读取用户的键盘输入。

程序运行到这个语句时,会停下,等待用户从键盘上输入。用户输入数据,按下回车键后,scanf就会处理用户的输入,将其存入变量。

2.scanf()的原型定义在头文件stdio.h。
3.scanf()的语法跟printf()类似。

其内部使用的占位符与printf函数基本一致。

 注意:前面的%d为格式字符串,“成绩”为变量。

变量前面必须加上&运算符(指针变量除外),因为scanf()传递的不是值,而是地址,即:将变量i的地址指向用户的值。

但如果是指针变量(比如字符串变量),就不用加&运算符。PS:&是取址运算符。

当scanf()一次将键盘输入多个变量时:

scanf()内不要随便加换行符,可以不用空格,但是在输入数据的时候记得空格,可以回车换行。

scanf在处理数值占位符时,会自动过滤空白字符,包括过滤空白字符,包括空格,制表符,换行符等。

 scanf()处理输入数据的原理

 用户的输入先放入缓存,等到按下回车键后,按照占位符对缓存进行解读。解读用户输入时,会从上一次解读遗留的第一个字符开始,知道读完缓存,或者遇到第一个不符合条件的字符为止。如:

 -123为整数,被第一个scanf函数采取, .45e12为科学计数法,精确后被第二个scanf函数采取,后面到#属于不符合条件的字符,结束。

scanf的返回值

scanf()的返回值是一个整数,表示成功读取的变量个数。如果没有读取任何项,或者匹配失败,则返回0。如果在成功读取任何数据之前,发生了读取错误或者遇到读取文件结尾,则返回常量EOF。如:

PS:Ctrl+Z可以将读取不再继续。

关于EOF

EOF:end of file 即文件的结束标志。EOF的本质是 -1。

结合上面的Ctrl+Z,可以用代码将EOF体现出来,如:

 占位符

scanf的常用占位符:%c(字符)、%d(整数)、%f(float类型浮点数)、%s(字符串)、%[ ] (在方括号中指定一组匹配的字符,若遇到不在集合中的字符,匹配停止)、%lf(double类型浮点数)、%Lf(Long double类型浮点数)

如图,使用的是%s(字符串),对于输入的数据,如果中间有空格,scanf的匹配就会结束。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值