LV005-输出简介
注意:下边测试输入的使用实例中的 ↙ 代表换行。
一、putchar
1. 函数说明
在 linux 下可以使用 man 3 putchar 命令查看该函数的帮助手册。
/* 需包含的头文件 */
#include <stdio.h>
/* 函数声明 */
int putchar(int c);【函数说明】 C 标准库 <stdio.h> 中的函数,把参数 c 指定的字符写入到标准输出 stdout 中。
【函数参数】
- c : int 类型,这是要输出的字符,该字符以其对应的 int 值进行传递。
【返回值】 int 类型,该函数以无符号 char 强制转换为 int 的形式返回写入的字符,如果发生错误则返回 EOF(-1) 。
【使用格式】 none
【注意事项】 putchar 函数只是输出一个字符,并不会自动换行。
2. 使用实例
#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 命令查看该函数的帮助手册。
/* 需包含的头文件 */
#include <stdio.h>
/* 函数声明 */
int puts(const char *s);【函数说明】 C 标准库 <stdio.h> 中的函数,把一个字符串写入到标准输出 stdout ,直到空字符,但不包括空字符。换行符会被追加到输出中。
【函数参数】
- str : char * 类型,这是要被写入的字符串。
【返回值】 int 类型,如果成功,该函数返回一个非负值为字符串长度(包括末尾的 \0 ),如果发生错误则返回 EOF(-1) 。
【使用格式】 none
【注意事项】 puts 函数输出时会 自动换行。
2. 使用实例
#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 命令查看该函数的帮助手册。
/* 需包含的头文件 */
#include <stdio.h>
/* 函数声明 */
int printf(const char *format, ...);【函数说明】 C 标准库 <stdio.h> 中的函数,发送 格式化输出 到 标准输出 stdout 。
【函数参数】
- format : char 类型,格式化字符串( format ),就是格式化需要输出的字符串, format 标签可被随后的附加参数中指定的值替换,并按需求进行格式化。format 标签属性如下所示
%[flags][width][.precision][length]specifier
// 即
%[标志][最小宽度][.精度][长度]类型。后边还会有更详细的说明
- ... :输出表(附加参数),根据不同的 format 字符串,函数可能需要一系列的附加参数,每个参数包含了一个要被插入的值,替换了 format 参数中指定的每个 % 标签。参数的个数应与 % 标签的个数相同。
【使用格式】
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. 使用实例
#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;
}打印结果如下:

四、fprintf
1. 函数说明
在 linux 下可以使用 man 3 fprintf 命令查看该函数的帮助手册。
/* 需包含的头文件 */
#include <stdio.h>
/* 函数声明 */
int fprintf(FILE *stream, const char *format, ...);【函数说明】该函数可以传送格式化输出到一个文件中,后边学习标准 IO 的时候会再学习,这里简单提一下。
【函数参数】
- stream : FILE * 类型指针变量,为文件指针变量。
- format : char * 类型,为格式化字符串,与 printf 一致。
【返回值】 int 类型,成功时返回输出的字符个数;出错时返回 EOF 。
【使用格式】一般情况下基本使用格式如下:
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 命令查看该函数的帮助手册。
/* 需包含的头文件 */
#include <stdio.h>
/* 函数声明 */
int sprintf(char *str, const char *format, ...);【函数说明】该函数用于向指定的字符串中格式化写入数据,与 printf 类似,只是该函数将格式化的字符串写入到字符串中。
【函数参数】
str : char * 类型,为指向一个字符数组的指针,后边的格式化字符串将会被写入到该函数中。
format : char * 类型,为格式化字符串,与 printf 一致。
【使用格式】
char buff[100]= { 0 };
sprintf(buff,"%d-%d-%d", 2022, 5, 4);【返回值】 int 类型,如果成功,则返回写入的字符总数,不包括字符串追加在字符串末尾的空字符,如果失败,则返回 EOF 。
【注意事项】 none
2. 使用实例
后边学习标准 IO 再详细学习。