从零开始学C语言系列之第三章《printf》

本文详细介绍了C语言中的printf函数,包括其基本格式、格式控制字符串、常用格式字符、转换说明和修饰符,以及输出值参数表的应用和注意事项。
摘要由CSDN通过智能技术生成

往期回顾

【第一章】《认识C语言》
【第二章】C语言概述及基本知识1
【第二章】C语言概述及基本知识2
【第三章】字符串和格式化输入/ 输出


printf函数

  • printf()函数能让用户可以与程序交流它们是输出函数或简称为 I/0函数
  • 可以说他是最常用的输出函数,可以将你写的代码展示到你的显示屏上面,方便调试

  printf函数是格式输出函数,其关键字最末一个字母f即为“格式(format)”之意。其功能是按照用户指定的格式,把指定的数据显示到显示器屏幕上。

printf函数一般格式

printf(格式控制字符串,输出值参数表);

如:

printf("f=%f,c=%f\n",f,c);

  其中,f=%f,c=%f\n格式控制字符串f,c输出值参数表

(1)格式控制字符串是用双引号括起来的字符串,包括三类信息:

  • 格式字符。格式字符由“%”引导,如%d、%f等。它的作用是控制输出字符的格式。

  • 转义字符。格式控制字符串里的转义字符按照转义后的含义输出,如上面printf函数双引号内的换行符“\n”,即输出回车。

  • 普通字符。普通字符即需要在输出时原样输出的字符,如上面printf函数中双引号内的“f=”和“c= ”部分。

(2)注意事项

​   输出值参数表是需要输出的数据项的列表,输出数据项可以是常量、变量或表达式,输出值参数之间用逗号分隔,其类型应与格式字符相匹配。每个格式字符和输出值参数表中的输出值参数一一对应,没有输出参数时,格式控制字符串中不再需要格式字符。

注意,如果没有输出参数时,但是还有格式控制字符串,则会发生未知错误。

#include <stdio.h>
#include <string.h>  
int main(void)
{
	int c = 0;
    printf("%d\n%d\n",c);
}

在这里插入图片描述
  这里,第2个号d没有对应任何项。系统不同,导致的结果也不同。不过,出现这种问题最好的状况是得到无意义的值。

printf()的转换说明修饰符

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

printf函数部分格式字符

较为常用已用红框标出的:
在这里插入图片描述

常用格式字符详解

%d

int a = 888,b = -666;
printf("%d\n%d",a,b);

输出结果:

在这里插入图片描述
  还可以在%和格式字符*中间插入格式修饰符*,用于指定输出数据的域宽(所占的列数),如用“%5d”,指定输出数据占5列,输出的数据在域内向右靠齐。如:

%md

例如:

int a = 888, b = -666;
printf("%5d\n%5d", a, b);

在这里插入图片描述
  从结果可以看出,在%和d中间加数字5,888占3个域宽,****指定域宽>输出数据长度**。****输出数据靠右,前面补空格

%f

  输出一个实数(包括单精度、双精度、长双精度),以小数形式输出,有以下几种用法:

  不指定输出数据的长度,由系统根据数据的实际情况决定数据所占的列数。系统处理的方法一般是:实数中的整数部分全部输出,小数部分输出6位

#include <stdio.h>
#include <string.h>  
int main()
{
	float c = 1.11111;
    printf("%f\n",c);
}

  从结果可以看出,在%和d中间加数字5,888占3个域宽,****指定域宽>输出数据长度**。****输出数据靠右,前面补空格

%f

  输出一个实数(包括单精度、双精度、长双精度),以小数形式输出,有以下几种用法:

  不指定输出数据的长度,由系统根据数据的实际情况决定数据所占的列数。系统处理的方法一般是:实数中的整数部分全部输出,小数部分输出6位

#include <stdio.h>
#include <string.h>  
int main()
{
	float c = 1.11111;
    printf("%f\n",c);
}

在这里插入图片描述
那怎么控制输出小数点后面的位数呢?

%.mf

#include <stdio.h>
#include <string.h>  
int main()
{
	float c = 1.11111;
    printf("%.3f\n",c);
}

在这里插入图片描述
  可以看出 %3.f 实际是 %3.0f,小数点前面控制域宽,小数点后面控制小数点保留的个数。

%c

#include <stdio.h>
#include <string.h>  
int main()
{
	char c ='1';
    printf("%c\n",c);
}

%s

#include <stdio.h>
#include <string.h>  
int main()
{
    printf("%s\n","123312");
}

注意:

  请求 printf()函数打印数据的指令要与待打印数据的类型相匹配,否则可能会出现错误

在这里插入图片描述
  第一个printf函数中的输出参数b是double型值58.8,但对应的格式控制符为%d,当类型不一致时并不会进行类型转换,而会将实际转入的double型值当作需要的整形类型来理解,因此出现非预期结果;

​   第二个printf函数中,格式控制字符串给出了两个%引导的格式字符,但是输出参数表中只有一个参数a,参数缺少。因此输出c的值默认为内存中a变量后面存储单元的数据值,c的值无法确定

printf的返回值

  返回值是是输出的字符数量,包括数字,字母,标点符号,空格等。

#include <stdio.h>
#include <string.h>  
int main()
{
	int A=43;
	printf("%d\n",printf("%d",printf("%d",A)));
}

最后输出结果是这个
在这里插入图片描述
  代码逻辑:首先,从最内层开始A=43被直接输出。然后,最内层printf的返回值以%d的格式被中间层的printf输出为2。最后,最外层的printf以%d的格式输出中间层的返回值为1。

  其实观察第二个printf的输出值和第三个printf的输出值,第一个printf的输出值和第二个printf的输出值不难发现:
        printf的返回值就是输出的字符数量

  第三个printf输出"43"字符数量为2,于是返回值为2,第二个printf就输出"2”
  第二个printf输出"2"字符数量为1,于是返回值为1,第一个printf就输出"1"

#include <stdio.h>
#include <string.h>  
int main()
{
	printf("%d\n", printf("0,1,2,3\n"));
}

在这里插入图片描述
  通过运行结果不难看出,数字0123分别占一个字符,标点符号" , “也是分别占一个字符位,换行符” \n "也是占一个。

#include <stdio.h>
#include <string.h>  
int main()
{
	int num=printf("%d\n", printf("0,1,2,3\n"));
	printf("%d\r\n", num);
}

在这里插入图片描述
  num值为2说明num接受printf的返回值是2

​   也说明了printf输出字符数量是2,其中一个是数字8,另外一个就是printf格式控制中的 " \n "可见,格式控制中的字符也算进返回值哦!

  • 38
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值