Skip to content

LV005-输出简介

注意:下边测试输入的使用实例中的 ↙ 代表换行。

一、putchar

1. 函数说明

在 linux 下可以使用 man 3 putchar 命令查看该函数的帮助手册。

c
/* 需包含的头文件 */
#include <stdio.h>

/* 函数声明 */
int putchar(int c);

函数说明】 C 标准库 <stdio.h> 中的函数,把参数 c 指定的字符写入到标准输出 stdout 中。

函数参数

  • c : int 类型,这是要输出的字符,该字符以其对应的 int 值进行传递。

返回值】 int 类型,该函数以无符号 char 强制转换为 int 的形式返回写入的字符,如果发生错误则返回 EOF(-1) 。

使用格式】 none

注意事项】 putchar 函数只是输出一个字符,并不会自动换行。

2. 使用实例

c
#include <stdio.h>

int main(int argc, char *argv[])
{
    char a = 0x23; /* ascii 中 0x23 = # */
    putchar(a);    /* 输出字符 */
    putchar('\n'); /* 输出换行符 */
    return 0;
}

二、puts

1. 函数说明

在 linux 下可以使用 man 3 puts 命令查看该函数的帮助手册。

c
/* 需包含的头文件 */
#include <stdio.h>

/* 函数声明 */
int puts(const char *s);

函数说明】 C 标准库 <stdio.h> 中的函数,把一个字符串写入到标准输出 stdout ,直到空字符,但不包括空字符。换行符会被追加到输出中。

函数参数

  • str : char * 类型,这是要被写入的字符串。

返回值】 int 类型,如果成功,该函数返回一个非负值为字符串长度(包括末尾的 \0 ),如果发生错误则返回 EOF(-1) 。

使用格式】 none

注意事项】 puts 函数输出时会 自动换行

2. 使用实例

c
#include <stdio.h>
int main(int argc, char *argv[])
{
    int i = 0;
    char str[16] = "abcdefg";/* 最后还有一个 \0 表示字符串的结束 */
    i = puts(str);    /* 输出字符串 */
    printf("i=%d\n",i);
    return 0;
}

三、printf

1. 函数说明

在 linux 下可以使用 man 3 printf 命令查看该函数的帮助手册。

c
/* 需包含的头文件 */
#include <stdio.h>

/* 函数声明 */
 int printf(const char *format, ...);

函数说明】 C 标准库 <stdio.h> 中的函数,发送 格式化输出标准输出 stdout 。

函数参数

  • format : char 类型,格式化字符串( format ),就是格式化需要输出的字符串, format 标签可被随后的附加参数中指定的值替换,并按需求进行格式化。format 标签属性如下所示
c
%[flags][width][.precision][length]specifier
// 即
%[标志][最小宽度][.精度][长度]类型。

后边还会有更详细的说明

  • ... :输出表(附加参数),根据不同的 format 字符串,函数可能需要一系列的附加参数,每个参数包含了一个要被插入的值,替换了 format 参数中指定的每个 % 标签。参数的个数应与 % 标签的个数相同。

使用格式

c
printf("<格式化字符串>", <输出表>);

返回值】 int 类型,如果成功,则返回写入的 字符总数,否则返回一个负数。

注意事项】 none

2. 格式化字符串详解

2.1 格式字符(specifier)

格式字符 形式 意义
i, d %i, %d 以十进制形式输出带符号整数(正数不输出符号)
u %u 以十进制形式输出无符号整数
o %o 以八进制形式输出无符号整数(不输出前缀 0)
x, X %x, %X 以十六进制形式输出无符号整数(不输出前缀 0x)
f %f 以小数形式输出单、双精度实数
e, E %e, %E 以指数形式输出单、双精度实数
g, G %g, %G 以 %f 或 %e 中较短的输出宽度输出单、双精度实数
c %c 输出单个字符
s %s 输出字符串

注意事项】想要输出 % 本身的话可以使用 %% 。

2.2 标识(flag)

标识 描述
- 在给定的字段宽度内左对齐,默认是右对齐
+ 强制在结果之前显示加号或减号(+ 或 -),即正数前面会显示 + 号。默认情况下,只有负数前面会显示一个 - 号。
space
(空格)
有符号值若为正,则在值前显示前导空格(但是不显示符号);若为负,则在值前显示-。
# 与 o、x 或 X 说明符一起使用时,非零值前面会分别显示 0、0x 或 0X。
与 e、E 和 f 一起使用时,会强制输出包含一个小数点,即使后边没有数字时也会显示小数点。默认情况下,如果后边没有数字时候,不会显示显示小数点。
与 g 或 G 一起使用时,结果与使用 e 或 E 时相同,但是尾部的零不会被移除。
0 输出数值时指定左面不使用的空位置自动填 0。

2.3 最小输出宽度(width)

宽度 描述
number 数值(十进制整数),数据长度 小于 number,则左补空格;否则按实际输出。
* 星号,精度在 format 字符串中未指定,但是会作为附加整数值参数放置于要被格式化的参数之前。
如:printf("%0*d ",6,1000); 将输出: 001000

2.4 精度(.precision)

精度 描述
.number 对于整数说明符(d、i、o、u、x、X):precision 指定了要写入的数字的最小位数。如果写入的值短于该数,结果会用前导零来填充。如果写入的值长于该数,结果不会被截断。精度为 0 意味着不写入任何字符。
对于 e、E 和 f 说明符:要在小数点后输出的小数位数。
对于 g 和 G 说明符:要输出的最大有效位数。
对于 s : 要输出的最大字符数, 不足 number 则正常输出,超过则截断。默认情况下,所有字符都会被输出,直到遇到末尾的空字符。
对于 c 类型:没有任何影响。
当未指定任何精度时,默认为 1。如果指定时不带有一个显式值,则假定为 0。
.* 星号,精度在 format 字符串中未指定,但是会作为附加整数值参数放置于要被格式化的参数之前。
但是在尝试的时候似乎有一些数据类型不匹配的情况,不过也用的不多。
【**注意事项**】

1.精度格式符以 . 开头,后跟十进制整数。

2.对数值型数据的来说,未指定精度( .precision )时,隐含的精度为 6 位。

2.5 长度( length )

详情可查看该网站(含有 C99 标准): File input/output。

3. 转义字符

转义字符 含义 ASCII 码(十进制)
\a 响铃(BEL) 007
\b 退格(BS),将当前位置移到前一列 008
\f 换页(FF),将当前位置移到下页开头 012
\n 换行(LF),将当前位置移到下一行开头 010
\r 回车(CR),将当前位置移到本行开头 013
\t 水平制表(HT),跳到下一个 TAB 位置 009
\v 垂直制表(VT) 011
\\ 反斜线字符 \ 092
\' 单引号字符 ' 039
\" 双引号字符 " 034
\? 问号 ? 063
\0 空字符(NULL) 000
\ooo 1-3 位八进制数所代表的任意字符 三位八进制
\xhh 1-2 位十六进制数所代表的任意字符 二位十六进制

4. 使用实例

c
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
	char c, str[20]; 
	int a = 12345;
	float pi = 3.141592653589; 
	double b = 0.123456789123456789; 
	strcpy(str, "strings");      /* 将字符串复制到数组 */
	c = '\x41';                  /* 两位十六进制转移字符 代表 A */

	printf("a = %d\n", a);       /* 按照十进制整数格式输出,显示 a = 12345 */
	printf("a = %d%%\n", a);     /* 输出%号 结果 a = 12345%             */
	printf("a = %7d\n", a);      /* 输出 7 位十进制整数 左边补空格,显示 a = 12345 */
	printf("a = %07d\n", a);     /* 输出 7 位十进制整数 左边补 0,显示 a = 0012345  */
	printf("a = %2d\n", a);      /* a 超过 2 位,按实际输出 a = 12345             */
	printf("a = %-7d\n", a);     /* 输出 7 位十进制整数 右边补空格,显示 a = 12345  */
	printf("pi = %f\n", pi);     /* 浮点数默认精度 6 位小数,结果 f = 13.141593    */
	printf("pi = %6.4f\n", pi);  /* 输出 6 列,小数点后 4 位,结果 f = 3.1416        */
	printf("b = %lf\n", b);      /* 输出长浮点数 b = 0.123457                  */
	printf("b = %18.17lf\n", b); /* 输出 18 列,小数点后 16 位,b = 0.12345678912345678 */
	printf("c = %c\n", c);       /* 输出字符 c = A */
	printf("c = %x\n", c);       /* 以十六进制输出字符的 ASCII 码 c = 41 */
	printf("str[] = %s\n", str); /* 输出数组字符串 str [] = strings    */
	printf("str[] = %6.3s\n", str);/* 输出最多 3 个字符的字符串 str [] = str */
	return 0;
}

打印结果如下:

image-20260206140634063

四、fprintf

1. 函数说明

在 linux 下可以使用 man 3 fprintf 命令查看该函数的帮助手册。

c
/* 需包含的头文件 */
#include <stdio.h>

/* 函数声明 */
int fprintf(FILE *stream, const char *format, ...);

函数说明】该函数可以传送格式化输出到一个文件中,后边学习标准 IO 的时候会再学习,这里简单提一下。

函数参数

  • stream : FILE * 类型指针变量,为文件指针变量。
  • format : char * 类型,为格式化字符串,与 printf 一致。

返回值】 int 类型,成功时返回输出的字符个数;出错时返回 EOF 。

使用格式】一般情况下基本使用格式如下:

c
FILE * fp;
size_t ret;
fp = fopen("file_name", "w");
ret = fprintf(fp, "%d-%d-%d", 2022, 5, 4);

注意事项】如果将 stream 设置为 stdout ,那么 fprintf() 函数将会向显示器输出内容,与 printf 的作用相同。

4.2 使用实例

后边学习标准 IO 的时候会再详细学习。

五、sprintf

1. 函数说明

在 linux 下可以使用 man 3 sprintf 命令查看该函数的帮助手册。

c
/* 需包含的头文件 */
#include <stdio.h>

/* 函数声明 */
int sprintf(char *str, const char *format, ...);

函数说明】该函数用于向指定的字符串中格式化写入数据,与 printf 类似,只是该函数将格式化的字符串写入到字符串中。

函数参数

  • str : char * 类型,为指向一个字符数组的指针,后边的格式化字符串将会被写入到该函数中。

  • format : char * 类型,为格式化字符串,与 printf 一致。

使用格式

c
char buff[100]= { 0 };
sprintf(buff,"%d-%d-%d", 2022, 5, 4);

返回值】 int 类型,如果成功,则返回写入的字符总数,不包括字符串追加在字符串末尾的空字符,如果失败,则返回 EOF 。

注意事项】 none

2. 使用实例

后边学习标准 IO 再详细学习。