文档视频讲解链接地址
- 腾讯课堂链接 : 18_输入与输出_字符输出putchar函数
- 腾讯课堂链接 : 19_输入与输出_格式输出printf函数1
- 腾讯课堂链接 : 20_输入与输出_格式输出printf函数2
第03章 输入与输出
I/O : input /output
3.1 字符输出putchar
-
输入与输出
- C语言无I/O语句,I/O操作由函数实现
- 需要包含头文件:
#include <stdio.h>
-
字符输出函数
- 格式: putchar( c )
- 参数: c为字符常量、变量或表达式
- 功能:把字符c输出到显示器上
- 返值:正常,为显示的代码值;
-
实例 18
- 源程序
01-cbase\18-putchar.c
- 源代码
#include <stdio.h> int main(int argc, char const *argv[]) { int a1 = 65 ; // ascii 'A' int a2 = 'A'; // ascii 65 int b1 = 10 ; // '\n' int b2 = '\n' ; // 10 putchar(a1); // A putchar(a2); // A putchar(b1); // 换行 putchar(b2); // 换行 putchar(a1+1); // B putchar(65+1); // B putchar('B'+' ') ; // 大写转小写 + ' ' 输出: b putchar('b'-' ') ; // 小写转大写 - ' ' 输出: B return 0; }
- 运行结果:
AA BBbB
3.2 格式输出printf
-
格式输出函数printf
- 格式:printf(“格式控制串”,输出表)
- 功能:按指定格式向显示器输出数据
- 返值:正常,返回输出字节数;出错,返回EOF(-1)
- 输出表:要输出的数据(可以没有,多个时以“,”分隔)
- 格式控制串:包含两种信息
- 格式说明:%[修饰符]格式字符 ,用于指定输出格式
- 普通字符:原样输出
- 格式控制串:包含两种信息
- 格式字符如下:
-
实例 19
- 使用printf函数输出以上表格的内容。
- 源程序
01-cbase\19-printf.c
- 源代码
#include <stdio.h> int main(int argc, char const *argv[]) { printf("hello world\n");// 输出表没有, 直接输出格式字符串 int x=10,y=20,z=30; printf("x=%d\n",x) ; // 输出表有1个 printf("x=%d,y=%d,z=%d\n",x,y,z) ; // 输出表有多个, 用逗号隔开, 普通字符原样输出 int a = 571 ; printf("a=%d\n",a); // 带符号的十进制整数, 表示a以整数的形式输出 printf("a=%i\n",a); // 带符号的十进制整数, 表示a以整数的形式输出 printf("a=%x\n",a); // 无符号的十六进制整数, 表示a以整数的形式输出 printf("a=%X\n",a); // 无符号的十六进制整数, 表示a以整数的形式输出 printf("a=%u\n",a); // 无符号的十进制整数, 表示a以整数的形式输出 printf("a=%o\n",a); // 无符号的八进制整数, 表示a以整数的形式输出 a = 'Y'; printf("a=%c\n",a); // 输出一个字符, 表示a以字符的形式输出 , 等价于 putchar printf("a=%s\n","goodbye"); // 输出一个字符串, 表示a以字符串的形式输出 float c = 567.789; printf("c=%e\n",c); // 指数形式浮点小数, 小写的e printf("c=%E\n",c); // 指数形式浮点小数, 大写的E printf("c=%f\n",c); // 小说形式浮点小数 printf("c=%g\n",c); // e和f中较短一种 printf("&c=%p\n",&c) ; // &c 是变量的地址 , 输出地址要使用%p , 以地址形式输出 printf("%%\n",&c) ; // 使用%% 输出百分号本省 return 0; }
- 运行结果
hello world x=10 x=10,y=20,z=30 a=571 a=571 a=23b a=23B a=571 a=1073 a=Y a=goodbye c=5.677890e+002 c=5.677890E+002 c=567.789001 c=567.789 &c=000000000061FE0C %
3.3 格式输出printf 附加格式说明符
-
附加格式说明符(修饰符)
-
实例 20
使用printf函数输出以上附加格式表格的内容。- 源程序
01-cbase\20-printf.c
- 源代码
#include <stdio.h> int main(int argc, char const *argv[]) { // m 宽度 int a = 567; printf("a=%d\n", a); // 按照10进制输出整数 printf("a=%8d\n", a); // 按照10进制输出整数, 输出宽度8个位置,不够左补5个空格 printf("a=%2d\n", a); // 按照10进制输出整数, 输出宽度2个位置,超出设定的位置 , 按照实际输出 printf("str=%8s\n", "goodbye"); // 输出一个字符串 , 输出宽度8个位置,不够左补1个空格 printf("str=%4s\n", "goodbye"); // 输出一个字符串 , 输出宽度4个位置,超出设定的位置 , 按照实际输出 // .n // 对于实数 , 保留小数点后面的位数 float b = 456.789; printf("b=%f\n", b); // 输出一个实数, 小数点后面保留6位 printf("b=%.2f\n", b); // 输出一个实数, 小数点后面保留2位, 四舍五入 printf("b=%.0f\n", b); // 输出一个实数, 小数点后面保留0位, 四舍五入 printf("b=%8.2f\n", b); // 输出一个实数, 输出宽度8,小数点后面保留2位, 四舍五入, 不够左补2个空格 printf("b=%4.2f\n", b); // 输出一个实数, 输出宽度8,小数点后面保留2位, 四舍五入, 超出设定的位置 , 按照实际输出 // 对于字符串, 控制字符串输出的个数 printf("b=%.3s\n", "goodbye"); // 输出一个字符串 , 字符串输出3个有效字符 printf("b=%8.3s\n", "goodbye"); // 输出一个字符串 , 字符串输出3个有效字符 , 输出宽度8, 不够左补5个空格 printf("b=%3.4s\n", "goodbye"); // 输出一个字符串 , 字符串输出4个有效字符 , 输出宽度3, 超出设定的位置 , 按照实际输出 // # printf("a=%o\n", a); // 按照8进制输出整数 printf("a=%#o\n", a); // 按照8进制输出整数, 会在输出时加上0的前缀 printf("a=%#x\n", a); // 按照8进制输出整数, 会在输出时加上0x的前缀 // + printf("a=%+d\n", a); // 按照10进制输出整数, 带上符号位, 正数+ , 负数- a = -123; printf("a=%+d\n", a); // 按照10进制输出整数, 带上符号位, 正数+ , 负数- // - 默认右对齐, 可以使用-来实现左对齐 printf("str=%8s\n", "goodbye"); // 右对齐, 左补1个空格 printf("str=%-8s\n", "goodbye"); // 左对齐, 右补1个空格 printf("a=%8d\n", a); // 右对齐, 左补4个空格 printf("a=%-8d\n", a); // 左对齐, 右补4个空格 // 0 左补0 , 不补空格 , 只限于右对齐的时候, 因为左对齐右补0会产生混乱 // 0 不能和- 同时使用 //printf("str=%08s\n", "goodbye"); // 这种补0 没有意义 错误用法 printf("a=%08d\n", a); // 右对齐, 左补4个空格 //printf("a=%-08d\n", a); // 没有意义 错误用法 printf("a=%ld\n",a) ; // long 类型的数据 printf("b=%lf\n",b) ; // double 类型的数据 return 0; }
- 运行结果
a=567 a= 567 a=567 str= goodbye str=goodbye b=456.789001 b=456.79 b=457 b= 456.79 b=456.79 b=goo b=goo b= goo b=good a=1067 a=01067 a=0x237 a=+567 a=-123 str= goodbye str=goodbye a= -123 a=-123 a=-0000123 a=-123 b=456.789001