C语言 打印

整理自小甲鱼鱼C论坛

打印

C语言的打印命令,printf,将制定的内容打印到屏幕上。

printf最后的f是formatted的缩写,格式,也因此通常把printf命令成为格式化输出函数

代码示例:

#include <stdio.h>

int main()
{
printf("
** *
******* **
************ ***
***************** ****
****** @ ***************
***************** ****
************ ***
******* **
** *");

return 0;
}

注意这样打印会报错,应该做一下修改:

#include <stdio.h>

int main()
{
printf("\n\
** *\n\
******* **\n\
************ ***\n\
***************** ****\n\
****** @ ***************\n\
***************** ****\n\
************ ***\n\
******* **\n\
** *\n\");

return 0;
}

\n的含义是换行。

字符串可以由可见字符和转义字符组成。

常用转义字符如下,

转义字符 含义
\a 响铃(BEL)
\b 退格(BS),将当前位置移到前一列
\f 换页(FF),将当前位置移到下一页开头
\n 换行(LF),将当前位置移到下一行开头
\r 回车(CR),将当前位置移到本行开头
\t 水平制表(HT),跳到下一个TAB位置
\v 垂直制表(VT)
\ 表示反斜杠本身()
' 表示单引号(‘)
" 表示双引号(“)
? 表示问号(?)
\0 表示空字符(NULL)
\ddd 1~3位八进制数所代表的任意字符
\xhh 1~2位十六进制数所代表的任意字符

注意换页转义字符( \ )后面的反斜杠,其作用是分行符。

因此代码可以改写如下:

#include <stdio.h>

int main()
{
print\
f("\n\
** *\n\
******* **\n\
************ ***\n\
***************** ****\n\
****** @ ***************\n\
***************** ****\n\
************ ***\n\
******* **\n\
** *\n\");

return 0;
}

但注意,换行符反斜杠后不能加空格,必须定格!

printf函数详解

函数概要:

pintf函数用于打印格式化字符串到标准输出流。

函数原型:

#include <stdio.h>
...
int printf(const char * format, ...);

参数分析:

(1) format参数

其参数为格式化字符串,由格式化占位符和普通字符组成。
格式化占位符以%开头, 用于指明输出参数值如何格式化。

格式化语法:

%[flag][width][.precision][length]specifier

每一个格式化占位符均以%开始,以转换字符结束。

specifer( 转换字符,必选 )的内容:

转换字符 参数类型;转换结果
c char;字符
d int;有符号十进制整数
i 同上
e double;以指数形式输出单、双精度浮点数(小写 e)
E 同上(大写 E)
f double;以小数形式输出单、双精度浮点数
g double;以 %f 或 %e 中较短的输出宽度输出单、双精度浮点数(指数显示小写 e)
G 同上(指数显示大写 E)
o unsigned int;无符号八进制(无前导 0)
s char *;字符串
u int;无符号十进制
x unsigned int;无符号十六进制(无前导 0x)
X 同上(无前导 0X)
p void *;指针值
n int *;存放已写字符的个数

flags(标志,可选):

标志 含义
- 指定被转换的参数在其字段内左对齐(默认是右对齐)
+ 指定在输出的数前面加上正负号
空格 如果第一个字符不是正负号,则在其前面加上一个空格
0 对于数值转换,当输出长度小于字段宽度时,添加前导 0 进行填充
# 指定另一种输出形式:
1. 如果转换字符为 o,则第一个数字为 0
2. 如果转换字符为 x 或 X,则指定在输出的非 0 值前加 0x 或 0X
3. 对于转换字符为 e、E、f、g 或 G 的情况,
指定输出总是包含一个小数点。另外,对于转换字符为 g 或 G,
还指定输出值尾部无意义的 0 将被保留

flags可以同时存在多个,无字数要求。

width(宽度,可选)是一个数值,用于指定最小字段的宽度

转换后的参数输出宽度至少要达到这个数值。如果参数的字符数小于该数值,则在参数左边(如果 flags 设置为 -,要求左对齐的话则在右边)填充一些字符。填充字符通常为空格,但是如果 flags 设置为 0,则填充字符为数字 0。

.precision(.精度,可选),通过点号(.)分隔字段的宽度和精度

  1. 对于字符串,它指定打印的字符的最大个数
  2. 对于整数,它指定打印的数字位数(必要时可加填充位 0 以达到宽度要求)
  3. 对于转换字符为 e、E 或 f,它指定打印的小数点后的数字位数
  4. 对于转换字符为 g 或 G,它指定打印的有效数字位数

length(长度修饰符,可选)的值可以是 h、hh、l、ll 或 L

  1. hh 表示将相应的参数按 signed char 或 unsigned char 类型输出
  2. h 表示将相应的参数按 short 或 unsigned short 类型输出
  3. l 表示将相应的参数按 long 或 unsigned long 类型输出
  4. ll 表示将相应的参数按 long long 或 unsigned long long 类型输出
  5. L 表示将相应的参数按 long double 类型输出

… 附加参数

该参数的个数由格式化字符串决定。

每个参数的值应当与前面格式化字符串中的占位符类型和位置一一对应。

返回值:

如果函数调用成功,返回值是实际打印的字符数(不包含表示字符串结束的 ‘\0’);

如果函数调用失败,返回值是一个负数。