当前位置:   article > 正文

printf 详解 - 你所不知道的printf用法

printf用法

系列文章目录

printf 详解 - 你所不知道的printf用法
scanf 详解 - 你所不知道的scanf用法
持续更新中…



一.printf的概念

定义: printf 是 (print format) 的缩写是指格式化输出函数,主要功能是向标准输出设备按规定格式输出信息

调用格式: printf("<格式化字符串>",<参量表>);

二.printf的使用

1.输出字符串

①直接输出字符串

输出格式 : printf("hello world!");

printf输出字符串的方式有很多,在我们最开始学习C语言时,我们会输出"hello world!",这样的方式属于直接输出字符串。它是根据'h'的地址向后一个一个进行打印,直到遇到'\0'才会停止,而"hello world!'\0'"其实是有'\0'的,只是被隐藏了,在这里我就不细讲了,后面我会出一期字符串的相关知识进行解释。当然我们也不需要这么复杂的去这样记,这里是为第二种输出方式做铺垫的。

②直接输出字符串变量

输出格式 : printf(str);

在这样输出之前我们要先做一件事情 char str[] = "hello world"; 我们需要先创建一个存储字符串的数组。这样创建的字符串"hello world!'\0'" 也是有'\0'在里面的,只是被隐藏了。在这里str所指向的是首字符h的地址,它也是通过str所指向的h的地址向后进行打印,直到遇到'\0'停止,这样的方法更为简单快捷,但我依然推荐后面要讲到的标准的输出格式。

③标准输出字符串

输出格式 : printf("%s", str);

这样的输出方式依然是要 char str[] = "hello world"; 先创建一个存储字符串的数组,然后通过这样的格式输出。这样输出能让读者这更清楚的读懂你这一步是要做什么事情,也有利于后期自己的阅读。

2.输出数字

①常规输出

在这里我们只需要先创建一个整形变量int num1 = 10; 和一个浮点型变量double num2;

输出格式释义
printf("%d", num1);%d是以十进制的方式进行输出。
printf("%o", num1);%o是以八进制的方式进行输出。
printf("%x", num1);%x是以十六进制的方式进行输出。
printf("%u", num1);%u是将符号位默认为数值方式进行输出。
printf("%f", num2);%f是以浮点数的方式进行输出。

②十进制输出技巧

在这里我们只需要先创建两个整形变量int num = 10;int count = 5;

输出格式释义
printf("%2d", num);%2d 它所表示占2个输出位置,数字靠右对齐,位数不足2个则在左边补空格
printf("%-2d", num);%-2d 它所表示占2个输出位置,数字靠左对齐,位数不足2个则在右边补空格
printf("%*d", count, num);%*d 表示占count = 5个输出位置,数字靠右对齐,位数不足5个则在左边补空格
printf("%-*d", count, num);%-*d 表示占count = 5个输出位置,数字靠左对齐,位数不足5个则在右边补空格
printf("%.4d\n", num);%.4d表示占4个输出位置,如果输出的内容不足4位则只在左边用零填充
printf("%04d\n", num);%04d表示占4个输出位置,如果输出的内容不足4位则只在左边用零填充

③八进制和十六进制输出技巧

在这里我们只需要先创建一个整形变量int num = 10;

输出格式释义
printf("%#o\n", num);输出八进制前面的0
printf("%#x\n", num);输出十六进制前面的0x

三.常用转义字符

转义字符释义
\’用于表示字符常量’
"用于表示一个字符串内部的双引号
\\用于表示一个反斜杠,防止它被解释为一个转义序列符
\b退格符
\f进纸符
\n换行
\r回车
\t水平制表符
\v垂直制表符
\dddddd表示1~3个八进制的数字
\xdddd表示2个十六进制数字

五.深水炸弹

问题:下面这段代码的输出结果为多少

	printf("%d", printf("%d", printf("%d", 43)));
  • 1

解答:

printf的返回值: printf函数的返回值是打印的所有字符的总数(包括转义字符)。

这道题令我印象极其深刻,我认为有必要拿出来专门讲一下。首先我们要思考printf("%d", 43) 的结果为多少?至少我第一次遇到的时候毫无头绪,但我们要知道 printf() 是一个函数,所以我们这里我们可以创建一个变量来接收这个值。

	int a = 12;
    a = printf("%d", 43);
    printf("\na = %d\n", a);
  • 1
  • 2
  • 3

这里我创建了一个变量a来接收printf("%d\n", 43);的返回值,输出结果 a = 2 得到这个输出结果的时候我就有了一点才想,这么无厘头的值该不会是有几个数吧!当然现在我还不能确定,我于是又进行了几次尝试。

	//测试:当111的输出结果
    int a = 12;
    a = printf("%d", 111);
    printf("\n%d\n", a);
  • 1
  • 2
  • 3
  • 4

在几次尝试过后我确定了 printf() 的返回值确实是 “数字的个数” 。最后我通过分析这道题的输出结果为4321

补充:

	int a = printf("num=%d\n",43);
    printf("%d",a);	//		结果为7
  • 1
  • 2

原因:里面有7个字符(包括转义字符,%d被43所代替,视为两个字符)。

六.小结

正是因为这样一道题,我认为我有必要对于每个函数的特性进一步的学习和研究,所以也从这篇博客开始,我将持续更新C语言标准库函数的函数详解,如果我的内容中出现错误也很乐意接受批评指点,希望每个看到我博客的人都能从中有所收获,而非无功而返,当然我会回再接再厉继续更新更为优质的博客与大家一起分享一起进步。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/347413
推荐阅读
相关标签
  

闽ICP备14008679号