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的匹配就会结束。