9、printf函数
9.1基本用法
可以通过该网址:https://legacy.cplusplus.com/
来查看printf函数的用法
printf()函数的作用就是将参数文本输出到屏幕中。printf中的f代表format(格式化),表示可以定制输出文本的格式。
示例:
//prinf函数
#include<stdio.h>
int main()
{
printf("hello c world");
return 0;
}
结果:

printf()函数不会自动在行尾添加换行符,运行结束后,光标会停在输出结束的地方,不会自动换行。
我们知道换行\n可以达到换行的目的,那么我们就可以在文本的末尾添加换行符\n
示例:

对于printf函数而言,该函数是库函数,使用printf函数时,要包含头文件:stdio.h
9.2占位符
printf()可以在输出文本中指定占位符
所谓的占位符就是在这个位置可以用其他值代入
例如:

在上述的示例中,i have %d books 就是输出文本,里面的%d就是占位符,表示这个位置要用其他值来替换。占位符的第一个字符一律用
百分号%,第二个字符表示占位符的类型,%d表示这个代入的值必须是一个整数。
printf()的第二个参数就是替换占位符的值,在上述的示例中,3替换了%d,执行后的结果是: i have 3 books.
举例:如果占位符要表示的事字符串类型的数据,那么占位符就是%s
示例:

当然输出文本也可以有多个占位符:

第一个%d对应5,第二个%d对应4,第三个%d对应9;
在printf()中的都是printf的参数,从上述示例中,我们可以得出如下结论:
printf函数参数与占位符是一 一对应关系,如果有n个占位符,printf函数的参数就有n+1个。
9.3占位符列举
printf函数的占位符有许多类型,与C语言的数据类型相对应。
比如:
int 类型的整数的十进制形式打印:%d
int 类型的整数的八进制形式打印:%o
int 类型的整数的十六进制形式打印:%x
short int 类型的整数的十进制形式打印:%hd
short int 类型的整数的八进制形式打印:%ho
short int 类型的整数的十l六进制形式打印:%hx
long int 类型的整数的十进制形式打印:%ld
long int 类型的整数的八进制形式打印:%lo
long int 类型的整数的十六进制形式打印:%lx
%c用于打印字符,%s用于打印字符串 %f用于打印float类型的数据
%lf用于打印double类型的数据 %p用于打印地址
9.4输出格式
(1)限定宽度
printf()允许限定占位符的最小宽度
示例:

上面示例中,%6d表示占位符的宽度至少是6位,如果不满6位,则会在该值的前面添加空格,直至满6位
但是如果超过了6位,则会直接打印该数据(一定不要认为超过6位的数据就不打印了)
示例:

扩展:
%nd(n是正整数)输出的值默认是右对齐,即输出的数据如果不满n位会在该数据的前面添加空格;如果希望改成左对齐(即:输出的数据如果不满n位会在该数据的后面添加空格),可以在占位符%的后面插入一个“-”号
示例:

对于小数,这个限定符会限制所有数字的最小显示宽度
示例:

分析:%12f表示输出的浮点数最少要占据12位。由于小数的默认显示精度是小数点后6位,所以123.45输出结果的头部会添加2个空格(注意:小数点也占一位)
(2)总是显示正负号
默认情况下,printf()不对整数显示+号,只对负数显示-号。如果想让正数也输出+号,可以在占位符的%后面加一个+
示例:

(3)限定小数位数
输出小数时,有时希望只需要输出小数点后3位,那么此时占位符可以写成:%.3f
示例:

注意:在用%.nf(n表示正整数)时,会有四舍五入的效果
示例:

对于小数来说,限定小数位数可以和限定宽度结合使用:
示例:

上述示例中,小数占3位,小数点占1位,整数部分占一位,总共有5位,不足6位,末尾是右对齐,所以在该数的前面加一个空格
扩展:
在限定宽度和限定小数结合使用时,可以用*分别来代替宽度和小数的位数,而两个*代表的数据可以通过printf函数参数来传入,然后代替
例如:

(4)输出部分字符串
%s占位符用来输出字符串,默认是全部输出。如果只想输出开头的部分,可以用%.[m]s指定输出的长度,其中[m]代表一个数字,表示所要输出的长度。
示例:

10、scanf函数
printf函数用于将变量输出到屏幕上,而scanf函数是在屏幕上输入变量的值
示例:

10.1基本用法
scanf()函数用于读取用户在键盘上输入的信息
scanf()函数具体执行过程:程序运行到这个语句时,会停下来,等待用户从键盘上输入信息,用户输入数据,按下回车键后,scanf()函数就会处理用户在键盘上输入的信息,将用户输入的信息存入变量中。
注意:使用scanf函数时,要包含头文件:stdio.h
scanf()的语法跟printf()函数类似
int i=0;//初始化
scanf("%d",&i);
scanf函数的第一个参数是一个格式字符串,里面会放置占位符(与printf()的占位符基本一致),告诉编译器如何解读用户的输入,需要提取的数据是什么类型。这是因为C语言的数据都是有类型的,scanf()必须提前知道用户输入的数据类型,这样才能处理用户从键盘上输入的数据。
它的其余参数就是存放用户输入的变量,格式字符串里面有多少个占位符,就有多少个变量。
在上面的示例中,scanf()的第一个参数%d表示用户输入的应该是一个整数。%d就是一个占位符,%就是占位符的标志,d表示整数。第二个参数&i表示:将用户从键盘输入的整数存入变量i中。
注意:scanf函数中,变量前面必须加上&运算符(指针变量除外),因为scanf函数传递的不是值,而是地址,即将变量i的地址指向用户输入的值。
如果这里的变量是指针变量(比如:字符串变量),那就不用加&操作符
如下是一次将键盘输入和读入多个变量的例子
//scanf函数一次读入多个变量
#include<stdio.h>
int main()
{
int i = 0;
int j = 0;
float x = 0.0f;
float y = 0.0f;
scanf("%d%d%f%f", &i, &j, &x, &y);
printf("i=%d\n", i);
printf("j=%d\n", j);
printf("x=%f\n", x);
printf("y=%f\n", y);
return 0;
}
结果:

上述代码中,格式字符串%d%d%f%f,表示用户输入的前两个值是整数,后两个值是浮点数。我在上述代码执行过程中输入了:1 2 2.3 2.6
那么这四个值依次放入i,j,x,y四个变量中。
一定要注意:scanf函数在处理数值占位符(即:数字型数据,比如:整型,浮点数)时,会自动过滤掉空白字符,包括:空格,制表符,换行符等。
所以,用户输入的数据之间,有一个或多个空格不影响scanf函数读取数据。另外,用户使用回车键,将输入分成几行进行输入(我用的就是这种方法),也不影响解读。
10.2scanf的返回值
scanf()的返回值是一个整数,表示成功读取的变量个数(什么叫成功读取呢?就是输入的数据要跟占位符一致)
如果scanf没有读取任何项,或者匹配失败,则返回0;如果在成功读取任何数据之前,发生了读取错误或者遇到读取到文件结尾,则返回常量EOF(本质上是-1)
示例:

10.3占位符
scanf函数常用的占位符与printf函数是占位符基本一致
%c:字符
%d:整型
%f:float型浮点数
%lf:double型浮点数
%Lf:long double 类型浮点数
%s:字符串
上述所有占位符中,除了%c以外,都会自动忽略起首的空白字符。%c不忽略空白字符,总是返回当前第一个字符,无论该字符是否为空格。
如果要强制跳过字符前的空白字符,可以写成 char ch;scanf(" %c",&ch),即:%c前加上一个空格,表示跳过0个或多个空白字符。
在scanf函数中的%s占位符,它不能简单地等同于字符串。它的原则是:从当前第一个非空白字符开始读起,直到遇到空白字符(即:空格,换行符,制表符等)为止
1867

被折叠的 条评论
为什么被折叠?



