目录
1、printf 函数
1.1基本用法:按照指定格式打印输出
printf函数是标准库函数,是由print(打印)和format(格式化),意为按照指定的格式,在标准输出设备(终端、屏幕)上输出信息,在使用的时候注意需要定义头文件<stdio.h>,这个头文件在前面已经讲过,就不在赘述。因此printf函数最基本的语法结构为:
以打印Hello world为例,代码可以写成:
1.2 \n 换行符
1.2.1 结尾使用
从上面的输出结果我们,我们可以看到,打印结束以后,光标停在了world之后,下一次我们再让他打印的时候就会紧接着world以后打印,这样不利于我们分辨,比如我们想让他打印Hello world以后,再让他另起一行打印Hi,如果我们按照下面这种方法
结果时行不通的,这是我们就可以使用换行符
使用方法是在你要打印的末尾加上\n(在双引号里面加,不是外面),对上面的代码进行更改。
1.2.2 中间使用
在上面的例子中,在结尾使用,如果我们按照下面的代码进行打印,行得通吗?
运行以后,结果与第一种方法一模一样。
1.3 %d %c %s 占位符
占位符顾名思义就是占领位置的符号,前面的打印有个特征,我们想要打印的东西,在我们写下代码的时候已经确认了,就是双引号里面的东西,但是这种方法有很大的局限性:我们设想一种情况,如果,我们想要随机输入两个数,然后打印出结果,那该怎么办呢?每次的结果都不固定。这时我们就可以引入占位符,占位符帮结果占领位置,结果用一个变量来存储,这样就完美的实现了。
1.3.1 %d 十进制整数占位符
帮十进制数占领位置的占位符,我们可以这样使用:
当然了,双引号里面也可以一部分固定内容,另一部分用占位符代替,比如
还可以有多个占位符
但是有一些注意事项,请务必注意,保证%d 与后面的参数一一对应,数目一致,中间由逗号隔开。
运行结果:
我们看到这里可能觉得还是不智能,但是如何引入输入函数,效果就不一样了。
1.3.2 %c 字符占位符
同样的,字符也有占位符,请看下面的代码,
当然了,多个%c 占位符也能使用,例如:
同样的,%d 十进制整数占位符可以与%c 字符占位符混用
1.3.3 %s字符串占位符
同样的字符串也有占位符,请看下面的代码
多个字符串也能使用。
同样的,不同类型的占位符也能使用
1.4 其他类型占位符
%d 或 %i:十进制 整数
%o: 八进制
%x 或 %X: 十六进制整数
%u: 无符号整数
%f: 浮点数
%lf: 双精度浮点数
%a 或 %A: 十六进制浮点数
%c: 字符
%s: 字符串
%% :输出百分号
1.5 设定输出格式
前面已经讲过,printf 是按照指定格式输出,那可以设定的格式有哪几种呢
1.5.1 限定最小宽度
%+数字+d:限定十进制整数的输出长度
如果大于等于这个值,则不做任何处理
如果小于这个值,会在左边补,注意!!!不是右边
%数字+s:限定字符串的输出长度
如果大于等于这个值,则不做任何处理
如果小于这个值,会在左边补,注意!!!不是右边
%+数字+f
如果大于等于这个值,则不做任何处理,这里需要注意,浮点数默认后面是6位小数,即使你没写,也已经有了,小数点也算一位
如果小于这个值,会在左边补,注意!!!不是右边
1.5.2 限定小数点
在前面讲的时候,我们说过,%f后面默认小数点后有6位,但是如果我们不想这么多位,怎么限制呢
%+数字+ . +f
请看这个例子
1.5.3 混合使用(既限制最小宽度,又限制位数)
1.5.4 字符串输出限定最大长度
%+ . +数字+s
上面讲的是浮点数的输出可以限定位数,同样的字符串输出,也可以限定最大的长度,请看下面的例子
PS:*的使用
上面公式中的数字,我们还可以用*代替,然后后面输入相关的数字
1.5 常有+-号
当我们输出一个数的时候,如果是负号,会有-,但是如果是正数,则没有,请看下面的代码:
这个时候,我们只需要在%后面加+即可
1.5 占位符和参数数目的关系
n个占位符,n+1个参数,因为n个占位符后面需要n个参数,本身双引号里面还有一个参数,则是n+1
2、scanf函数
刚才我们在引入占位符的时候,举了一个例子,再来回顾一下:我们设想一种情况,如果,我们想要随机输入两个数,然后打印出结果,那该怎么办呢?每次的结果都不固定。这时我们就可以引入占位符,占位符帮结果占领位置,结果用一个变量来存储,这样就完美的实现了。在这句话中,我们说了,输入,那我们怎么输入呢,这个时候就要引入scanf函数。
2.1基本用法
scanf 是 C 语言中用于从标准输入(通常是键盘)读取输入数据的函数。它通过使用格式说明符来解析输入,将数据存储到指定的变量中。在使用的时候注意需要定义头文件<stdio.h>。
请看这个代码:
注意:
scanf
使用 %d
格式说明符来读取一个整数,并将它存储到m 变量中。
&
运算符用于获取变量的地址。
执行以后,等待用户输入
输入以后代码接着执行,程序结束
2.2 %d %c %s 占位符
2.2.1 %d 整数占位符
2.2.2 %c 字符占位符
如果我们输入的是字符串,会出现什么效果
会将字符串的第一个字符存入变量
如果我们输入的是空白字符会怎么样
输入空白字符,点enter
打印的也是空白字符,即使后面还有非空白字符打印的也是空白字符
如果我们想要%c忽略空白字符,只需要在%c后面加一个空格,这样所有的空格都会被忽略
2.2.3 %s 字符串占位符
我们来看一下基本用法:
如果我们输入空格是什么情况
我们会发现,终端一直在等待输入,并没有识别空白字符
同样的,我们输入完空格以后再输入字符,他会跳过空格,里面存入后面我们输入的字符串
他的存入规则是:从第一个非空白字符开始读入,直到遇到空白字符为止
PS:%s 使用时的注意事项
scanf在将字符串读入字符数组的时候,不会检测字符串是否超过了数组的长度,所以在存储的时候可能会出现放不下的情况。比如
点击enter
出错!
这个时候我们应该指定读入的最大字符串长度,方法是
%+数字+s
这个时候就不出问题
2.3 其他类型占位符
%f
: 读取一个浮点数
%lf
: 读取一个双精度浮点数
%u
: 读取一个无符号整数。
%x
或 %X
: 读取一个十六进制整数。
%o
: 读取一个八进制整数
2.4 多个输入
我们来看下面的代码
其实由于scanf 对于字符串,整型,浮点型都是忽略空格、换行、制表符的(字符不忽略),所以分行输入也不影响结果:
2.5 scanf的返回值
scanf
函数的返回值是成功读取和赋值的参数的数量。如果返回值小于提供的参数数量,则可能发生输入匹配失败。
成功读取的情况
读取中途失败,或者用ctrl +Z 强制结束
a不是浮点数,读取失败,scanf终止,不会继续读下一个,无论后一个是否输入正确
第一个就读取失败,返回值为0
这个时候,没有一个被读取
如果在成功读取之前发生读取错误,比如直接跳过,这个时候返回值是EOF
补充:
EOF是什么?
EOF 是 C 语言中的一个宏,代表 "End of File",表示文件结束标志。在文件输入/输出中,EOF 用于指示已到达文件的末尾,无法读取更多的数据。
在 C 中,EOF 是一个负整数,通常被定义为 -1。在标准输入中(比如键盘输入)和标准输出中,当用户按下特定的组合键(例如 Ctrl+D 或 Ctrl+Z)时,系统会发送 EOF 到程序,表示输入结束。
EOF 在文件输入/输出函数中常用于判断是否已到达文件末尾。
宏是什么?
在计算机编程中,宏(Macro)通常是一种由预处理器处理的代码片段。预处理器是编译过程中的一部分,它在实际编译之前对源代码进行处理。宏是一种用于简化代码书写和提高代码重用性的机制。