printf函数
一,printf的意思
首先printf由print和f字母构成,printf是打印的意思而f则代表format(格式化)的意思。
所以合起来printf就叫格式化打印,知道这个函数的名字之后我们便可见其名知其意了
没错,在c语言中printf就是用来格式化输出数据的函数。
二,printf的格式输出
printf函数由printf(“”)括号,引号,控制符,参数构成。
#include<stdio.h>
int i=5;//定义一个变量
printf("%d",i);
正如你所看到的printf在使用时写法为printf(“格式占位符(格式控制符号)”,参数); 上面printf函数里的%d就是格式占位符(格式控制符)它有两个名字分别有不同作用,
1格式控符:通常以%开头,它的作用是指定参数按照它所指定的格式来输出。
2格式占位符:为后面的参数占一个位置。
下面通过一个简单的例子来理解格式占位符(格式控制符)的作用
#include<stdio.h>
int i=10; //定义一个整型变量
char j = 'a';//定义一个字符型变量
printf("%d=10",i);
printf("26个英文字母之首是%c",j);
我们可以很直观的看到printf中的%d 和 %c 明显代替了参数i和j的位置这就是占位符的功能*另外读者有没有发现2个printf一个输出的是数字一个输出的是英文字没错,这就是因外它门输出的格式不同所导致的下面有一些常用的格式控制符
%d 输出⼗进制整数
%c 输出字符
%f 输出小数
%s 输出字符串
看到这大家会不会有个疑问为什么上面这句话———
“26个英文字母之首是”
这句话能够直接输出被我们看到呢?这就是下面要说的printf非格式输出
三,printf的非格式输出
既然有格式输出那么不难猜出printf还有非格式输出,相当于是应对突发情况。printf的非格式输出就是说不用格式控制符来输出人们想要输出的内容,举个例子
#include<stdio.h>
printf("hello word!");
printf("我要学好c语言!");
printf非格式化输出的逻辑就是在双引号内部写你想要输出的内容,比如我上面想要输出hello word!我就在双引号内部写下hello word!这就是printf的非格式输出。
注意以上代码出现的\n是换行符 是转义字符的一种
四,数据的限定宽度和限定小数
认识了printf的格式输出和非格式输出后我们接下来来认识一下限定宽度和限定小数位数,通常在%的前面,以m.n%d来表示(这里用输出整数和浮点数(小数)的格式来举例)
#include<stdio,h>
int a = 7;
float b = 7.890; //浮点型变量(可以认为是小数)
printf("%2d\n", a);
printf("%3d\n", a);
printf("%4d\n", a);
printf("%0.1f\n",b);
printf("%0.2f", b);
从运行结果来看我们很容易看出2,3,4对应m.n%d中的m控制输出宽度从图中不难看出%2d到%4d是依次加一的所以7的位置也是依次加一的,而图中0.1和0.2不难发现0代表0个宽度.1代表输出一位小数.2代表输出2位小数 注意直接写%d是默认0宽度输出。
五,数据的左右对齐
一般来说printf的输出值是默认右对齐的,只要%d中d的前面是个正数就是右对齐,想要输出的值左对齐则要在d前面加上负号。
#include<stdio.h>
int n=123;
printf("%5d\n", n); // 输出为" 123"
printf("%-5d\n", n); // 输出为"123 "
讲完输出函数那必然就有输入函数下面我们来介绍一下输入函数scanf。
scanf函数
一,scanf的意思
scanf函数由英文字母scan和format构成scan是扫描的意思,合在一起就是格式扫描但为什么说它是输入函数呢?因为只有扫描了计算机才能读取数据,换句话说计算机怎样才能知道我们输入了什么内容就是通过对我们输入的内容进行扫描,举个例子平常我们扫码获取某个文件就是通过扫描来告诉机器我们想要的内容。
二,scanf的格式输入
上面介绍了printf的格式输出和非格式输出但scanf就有些许不一样了scanf必须格式输入。当我们有了变量,我们需要给变量输⼊值就可以使用scanf,函数⽤于读取用户的键盘输入程序运行到这个语句时,会停下来,等待用户从键盘输入。用户输⼊数据、按下回车键后scanf()就会处理用户的输⼊,将其存入变量。
#include<stdio.h>
int i; //定义一个整型变量
scanf("%d",&i);
scanf(“%d”,&i)这里的scanf函数由scanf,括号,双引号,格式控制符,参数构成而这里的参数与printf的参数就不一样了&i是对变量取地址的意思,因为变量在计算机中是要占用一定的内存空间的,而地址相当于是门牌号通过找门牌号来找到这个变量。所以我们输入数据时要给这个变量一个门牌号。
另外一点值得注意的是我们用完scanf输入了数据后数据并不会因为我们的输入而显示出来,我们想到查看时是要通过printf函数才能实现对比上面和下面两段不同的代码对比相信读者很容易能够理解。
#include<stdio.h>
int i; //定义一个整型变量
scanf("%d",&i);
printf("%d",i);
下面再用一个读入多个变量的例子来加强对scanf函数的理解
#include <stdio.h>
int main()
{
int x;
float y;
// ⽤⼾输⼊" -13.45e12# 0"
scanf("%d", &x);
printf("%d\n", x);
scanf("%f", &y);
printf("%f\n", y);
return 0;
}
上面示例中,scanf() 读取用户输入时,%d 占位符会忽略起⾸的空格从处开始获取数据,读取到-13停下来,因为后⾯的不属于整数的有效字符****。这就是说,占位符第⼆次调⽤%d 会读到-13 scanf() 时,就会从上⼀次停⽌解读的地方,继续往下读取。这⼀次读取的首字符是.,由于对应的占位符是%f,会读取到.45e12 ,这是采用科学计数法的浮点数格式。一直到后面的#不属于浮点数的有效字符才停止读取。
.45e12相当于0.4510^12*
scanf() 处理用户输⼊的原理是,用户的输入先放入缓存,等到按下回车键后,按照占位符对缓存进行解读。解读用户输入时,会从上一次解读遗留的第一个字符开始,直到读完缓存,或者遇到第⼀个不符合条件的字符为止。
看到这里printf和scanf的基本介绍也进入尾声了,读到这里的读者首先要感谢你的阅读,本人是刚进入优快云的新手小白如果文章有出现任何的概念,逻辑等问题欢迎各位大佬的指点我会加以改正,还请多多包涵共同学习!