C语言printf()输出函数的用法(非常详细)
printf() 是 C 语言的一个输出函数,它的作用是向终端(输出设备,通常是屏幕)输出若干任意类型的数据。
printf() 函数的语法格式如下:
例如,要输出一个整型变量,代码如下:
printf() 是函数,“格式控制”和“输出列表”都是函数参数,因此 printf() 函数的一般形式可表示为:
运行程序,结果为:
printf() 函数的语法格式如下:
printf(格式控制, 输出列表)
1) 格式控制
格式控制是用双引号括起来的字符串,也称为转换控制字符串。其中包括格式字符和普通字符:- 格式字符:用来进行格式说明的字符,作用是将输出的数据转换为指定的格式。格式字符通常以“%”开头。
- 普通字符:需要原样输出的字符,包括双引号内的逗号、空格和换行符。
2) 输出列表
输出列表列出的是要进行输出的一些数据,可以是变量或表达式。例如,要输出一个整型变量,代码如下:
int iInt=10; printf("this is %d",iInt);执行上面的语句,输出的字符是“this is 10”。格式控制双引号中的字符是“this is %d”,其中的“this is”字符串是普通字符,而“%d”是格式字符,表示输出的是后面的 iInt 数据。
printf() 是函数,“格式控制”和“输出列表”都是函数参数,因此 printf() 函数的一般形式可表示为:
printf(参数1,参数2,…,参数n)函数中的每个参数都必须按照给定的格式和顺序依次输出。例如,输出一个字符型变量和整型变量的代码如下:
printf("the Int is %d,the Char is %c",iInt,cChar);下表列出了有关 printf() 函数的格式字符。
格式字符 | 功能说明 |
---|---|
%d, %i | 用来输出有符号的十进制整数 |
%u | 用来输出无符号的十进制整数 |
%o | 用来输出无符号的八进制整数 |
%x, %X | 用来输出无符号的十六进制整数。%x 表示以小写形式输出;%X 表示以大写形式输出 |
%c | 用来输出单个字符 |
%s | 用来输出字符串 |
%f | 用来输出实数,以小数形式输出 |
%e, %E | 用来输出实数,以指数形式输出 |
%g, %G | 以%f或%e中宽度较短的格式输出,不输出无意义的0 |
【实例 1】牛吃草问题。一头牛可以吃 2 千克草,现有 45 千克草,可供几头牛吃饱。首先定义相应的变量,然后利用表达式计算结果,最后用 printf() 函数对结果进行输出。注意,printf() 函数中除了 X、E 和 G,其他格式字符必须使用小写字母,如 %d 不能写成 %D。
#include <stdio.h> /*包含头文件*/ int main() /*主函数 main*/ { int graNum, graSum, num; /*graNum 为一头牛吃的草量,graSum 为总草量,num 为结果*/ graNum = 2, graSum = 45; /*为变量赋值*/ num = graSum / graNum; /*利用表达式计算结果*/ printf("%d cows eat enough\n", num); /*将结果输出*/ return 0; /*程序结束*/ }程序中定义了 3 个整型变量,并为变量赋值。第 6 行使用算术表达式计算结果,并将结果赋给变量 num。在 printf() 函数中,使用格式符号“%d”进行输出。
运行程序,结果为:
22 cows eat enough
C语言printf()函数的高级用法
在格式说明中,在“%”符号和上述格式字符间可以插入如下表所示的几种附加符号。附加字符 | 功能说明 |
---|---|
l | 用于输出长整型整数,可加在 d、o、x、u 的字母前面 |
m | 用于指定输出数据的字段宽度,数字或字符在域内向右对齐 |
n | 对实数,表示输出 n 位小数;对字符串,表示截取的字符个数 |
- | 用于指定输出的数字或字符在域内向左对齐 |
【实例 2】打印变幻莫测的“Cyuyan”。如果想输出“%”符号,可在格式控制处使用“%%”进行输出。
#include <stdio.h> int main() { long iLong = 100000; /* 定义长整型变量,为其赋值 */ printf("the Long is %ld\n", iLong); /* 使用 %ld 输出长整型变量 */ printf("the string is: %snihao\n", "Cyuyan"); /* %s,输出字符串 Cyuyannihao(按实际长度输出) */ printf("the string is: %10snihao\n", "Cyuyan"); /* %10s,输出宽度为 10,右对齐,左补空 */ printf("the string is: %-10snihao\n", "Cyuyan"); /* %-10s,输出宽度为 10,左对齐,右补空 */ printf("the string is: %10.2snihao\n", "Cyuyan"); /* %10.2s,输出宽度为 10,截取 2 个字符右对齐输出 */ printf("the string is: %-10.2snihao\n", "Cyuyan"); /* %-10.2s,输出宽度为 10,截取 2 个字符左对齐输出 */ return 0; }运行结果为:
the Long is 100000 the string is: Cyuyannihao the string is: Cyuyannihao the string is: Cyuyan nihao the string is: Cynihao the string is: Cy nihao
- 在程序代码中,定义的长整型变量在使用 printf() 函数输出时,应该用“%ld”格式字符;
- “%s”用来输出一个字符串的格式字符,在结果中可以看到输出了字符串“Cyuyannihao”;
- “%10s”格式为“%ms”,表示输出字符串占 m 列。如果字符串长度大于 m,则突破 m 的限制,将字符串全部输出;若字符串长度小于 m,则用空格进行左补齐。可以看到在字符串“Cyuyannihao”前存在 4 个空格;
- “%-10s”格式为“%-ms”,表示如果字符串长度小于 m,则在 m 列范围内,字符串向左对齐,右补空格;
- “%10.2s”格式为“%m.ns”,表示输出占 m 列,但只取字符串左端 n 个字符。这 n 个字符输出在 m 列的右侧,左补空格;
- “%-10.2s”格式为“%-m.ns”,其中 m、n 含义同上,n 个字符输出在 m 列的左侧,右补空格。如果 n>m,则 m 自动取 n 值,即保证 n 个字符正常输出;