C语言(2)/printf函数、格式字符、转义字符

前言

以下均使用Visual Stdio 2022集成开发环境,内容仅适用于初学者。本章内容为零散知识点,目的是为了让读者更加深入理解某一方面的知识。


目录

一、printf函数的输出形式

Ⅰ、printf函数输出格式

Ⅱ、printf 函数的右结合性

Ⅲ、printf函数中自增自减的复合运算

二、格式字符

Ⅲ、转义字符


一、printf函数的输出形式

Ⅰ、printf函数输出格式

printf函数是一个标准库函数,它的函数原型在头文件“stdio.h”中。当我们需要使用时需要引入stdio.h头文件。printf函数的一般调用形式如下:

 printf(“格式控制字符串”, 输出表列);

如下

#include <stdio.h>
int main()
{     
	int a = 1;
	int b = 2;
	printf("a的值为%d b的值为%d\n", a, b);
	printf("a+b的值为%d\n", a + b);
	printf("%d\n", 23);
	printf("%d %d %d", a, b, a + b);
	return 0;
}

结果为

 ①\n为转义字符,详见目录->转义字符

%d为格式字符,详见目录->格式字符

③双引号内容为打印内容。格式字符,格式字符对应输出列表的变量(按顺序一一对应),%d为十进制整数输出。转义字符,转义字符\n意思是打印到\n这个位置时光标移动到下一行。

④输出列表中的数据可以为变量常量表达式

Ⅱ、printf 函数的右结合性

右结合性就是输出列表的运行顺序,如下

#include <stdio.h>
int main()
{     
	int a = 10;
	int b = 0;       //等号表达式的值为左边的值
	printf("%d %d ", b = a + 10, a = b + 1);
	return 0;        //即b = a + 10 可以用a+10代替                     
}                    //只不过在列表中b的值已经被改变

 结果为

printf中参数列表是从左边向右边运行时,输出应该为 20 21

printf中参数列表是从右边向左边运行时,输出应该为 11 1

所以printf函数具有右结合性。

Ⅲ、printf函数中自增自减的复合运算(可略过)

那么有争议的问题来了!

#include <stdio.h>
int main()
{     
	int a = 10;
	printf("%d %d %d %d %d %d", a++, a, --a,  a--, a++, ++a);
	return 0;                  //⑥   ⑤   ④    ③     ②    ①
}

结果为

自增自减运算符加入到printf函数中就变得不一样了,由于程序从右向左运行,运行流程如下。

①前置++,首先a的值先+1 ,此时a = 11并留置(不作为格式字符真实值)在此。留置产生,所以11作为真实值并打印。)

②后置++,运行程序前a的值为11,然后将11作为格式字符的真实值,运行之后a = 12。打印11。)

③后置--,运行程序前a = 12 ,然后将12作为格式字符的真实值,运行后a = 11。(打印12。)

④前置--,运行程序前 a = 11,然后自减 a = 10,并留置在此。留置产生,所以11作为真实值并打印。)

⑤无任何操作,a = 10留置在此。留置产生,所以11作为真实值并打印。)

⑥后置++,运行程序前a = 10,然后将a作为真实值打印。a自增 a = 11。(打印10。)

输出列表扫描完毕,a最终的结果为11,最后将11作为以上操作留置后的真实值。

总结:在printf函数中遇见自增自减运算符时,只需要知道后置++和后置--不需要留置,其他的都需要将a的结果算出来,然后再填充到留置的区域。

注:以上结果在Visual Studio 2022实验的结果,因为涉及到自增自减的复合运算,不同的编译器给出的解决方案不同,所以得出的结果不同,以上我们只需要知道printf函数具有右结合性就行了,类似于这种自增自减的复合运算的代码,正经的程序员根本就不会写这种垃圾代码,因为不具有普遍性,当然在朋友面前装一下还是可以的(。ӧ◡ӧ。)。

二、格式字符

格式字符含义
%d以十进制整数形式输出
%ld以十进制长整形输出
%f以单精度浮点型输出
%lf以双精度浮点型输出
%o以八进制整型输出整数。
%x或%X以十六进制形式输出整数
%u以十进制无符号整形输出
%i以十进制整形输出(与%d无异)
%c输出单个字符
%s输出字符串
%e或%E以指数形式输出
%g或%G

自适应数据输出(数据够大或够小

则以指数形式输出,否则以小数

形式输出

%p输出地址

① 对于%f与%lf如下,当违背以下准则时可能会导致程序出错或崩溃。

类型scanf函数printf函数
float%f%f、%lf
double%lf%lf

②格式字符的标志(在英文格式字符前加字符表示不同的意思)

标志含义实例
n.mn表示整数占几行,m表示小数占几行%2.3f
-输出的结果左对齐%-d
空格输出值为正时冠以空格,为负时冠以负号
#

输出带有前导的数据(八进制为0~~~,

十六进制为X~~~,~表示数字)

%#d

Ⅲ、转义字符

转义字符释义
\?在书写连续多个问好时使用,防止他们被解析成三字字词
\'用于表示字符常量
\"用于表示一个自负床内部的双引号
\\用于表示一个反斜杠,防止它被解释为一个转义序列符
\a警告字符,蜂鸣
\b退格符
\f换页符
\n换行符
\r回车
\t水平制表符(8个空格)
\v垂直制表符
\dddddd表示1-3个八进制的数字。如:\120
\xdd

dd表示2个十六进制数字,如:\x30

识点:

在Windows系统中我们输入回车时,输入的字符是\r\n,unix系统中回车为\n,而mac系统中回车的字符为\r. 


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寒夕君哎

动力+99(*•̀ᴗ•́*)و

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值