输入/输出
C语言不把提供输入输出语句,而是通过调用库函数来实现的 ,在头文件stdio.h中,
格式化输入输出
printf()函数 用于向标准输出设备按规定格式输出数据。函数原型在头文件stdio.h中
调用格式 printf(“格式控制”[,输出表达式表]);
格式说明符 每个格式说明符都必须以%开头,以一个格式字符作为结束,在%与格式字符之间根据需要可以插入宽度说明、左对齐符号”-”、长度修饰符”l”或“L等”
格式控制字符串的一般形式 %[+/_][m.n][h/l]格式字符
开始符 |
标志字符 |
宽度指示符 |
小数点 |
精度指示符 |
长度修正符 |
格式转换字符 |
% |
+、-、*、/ |
m |
. |
n |
h/l |
格式字符 |
常用的格式字符
格式字符 |
功能 |
d,i |
输出带符号的十进制整数 |
u |
输出无符号十进制整数 |
x,X |
输出不带前导符0X或0x的无符号十六进制整数 |
o |
输出无符号形式八进制整数 |
f |
输出小数形式的单、双精度实数 |
e,E |
输出科学记数法形式的实数 |
c |
输出单个字符 |
s |
输出字符串 |
g,G |
选用f和e格式 |
p |
十六进制的内存地址形式输出 |
% |
输出% |
附加说明符 为了满足多样的输出格式控制需求
格式 %[附加说明字符序列]格式符
附加说明符 |
说明 |
l |
用于长整型,可以加在d、o、x、u的前面;也可以加在e,E,f,g,G的前面时,用于输出长双精度实数型数据(long double) |
m(正整数) |
数据输出的最小宽度 , 当数据实际宽度超过 m 时, 则按实际宽度输出 , 如实际宽度短于m则输出时,在前面补0 或空格 |
.n(正整数) |
对实数表示输出n位小数,对字符串表示从左截取的字符个数 |
- |
输出的字符或数字在域内向左对齐 , 默认右对齐 |
+ |
输出的数字前带有 正负号 |
0 |
在数据前多余空格处补 0 |
# |
用在格式字符o 或x前 , 输出八进制或十六进制数时带前缀 0 或 0x |
使用说明
格式控制字符串中,格式转换说明与输出项从左到右的数据类型必须一一匹配否则将输出错误结果
在格式控制字符串中,格式说明与输出项的个数必须相同。如果格式说明的个数少于输出项的个数多余的输出项不予输出,如果格式说明的个数多于输出项的个数,则对于多余的格式控制字符因没有对应的输出项而输出不确定值
在使用"f"格式符输出实数时,并非全部数字都是有效数字,单精度实数的有效位数一般为7位,双精度数的有效位数一般为16位。
输出数据宽度说明 可以使用系统默认,也可以自定义
系统默认宽度,由系统决定
整型数据的输出宽度。当数据实际宽度超过 m 时, 则按实际宽度输出 , 如实际宽度短于m则输出时,补空格(默认左补,若在m前增加-,则右补)
字符串的输出宽度
%ms,输出宽度占m列,若字符串宽度小于m列,左补空格,若字符串宽度大于m列,原样输出字串
%m,ns,输出宽度占m列,但只取字符串的左端n个字符,n小于m,左补空格。
在输出宽度m前加一个负号“一”,若字符串宽度小于m列,则右补空格。
实型数据的输出宽度。
%m.nf,%m.ne,%m.ng,数据输出的总宽占m列,其中小数部分位n列。若数据自身宽度小于m列,则左补空格。有关小数据部分输出格式的规定:当输出数据的小数位多于指定的小数宽度n时,截去右边多余的小数,并对截去的第一位小数做四舍五入处理;当输出数据的小数位少于指定的小数宽度n时,在小数的最右边补0。当输出数据的宽度大于指定的总宽度m时,小数部分仍按上述规则处理,整数部分原样输出。在输出寞度m前加一个角号“一”,若数据自身宽度小于m列,则右补空格。应该注意并非所有输出的数字均是有效数字。格式说明中规定的数据宽度m和小数位宽度n再大也不能改变数据的存储精度,所输出的多余位的数字是无意
scanf()函数
调用形式 scanf("输入格式字符串"输入变量地址表);
格式字符
d,i
输入十进制整数
u
输入无符号十进制整数
x,X
输入无符号的十六进制整数(不区分大小写)
o
输人无符号形式八进制整数
f
输入实数,可以用小数形式或指数形式输人
e,E,g,G
e,E,g,G|与%f作用相同,%e,%f,%g可以互相替换使用
c
输入单个字符
s
输入字符串,将字符串送到一个字符数组中,在输入时以非空字符开始,遇到回车或空格字符结束
附加格式说明字符及作用
L或l
用在格式字符d、o、x、u前,表示输入长整型数据;
用在f或e前,表示输人 double型数据
h
用在格式字符d、I、o、X前,表示输入短整型数据
m
指定输人数据所占宽度,不能用来指定实数型数据宽度,应为正整数
*
表示该输入项在读入后不赋值给相应的变量
注意
①表中的m是一个正整数,主要用来控制输入数据的位数。m可以省略,省略时
可以用非格式字符作为两个数据的间隔;也可以在输入时用空格、Tab或回车键作为两个输入数据的间隔
②用%c作为输人格式字符时仅接受单个字符。从键盘输入单个字符后应按回车
键,此时回车键作为一个字符将存放在键盘缓冲区,如果下面再有%c作为输入格式字符时,将不再读键盘,而从键盘缓冲区取出没有读完的“回车键”
例如
使用 scanf()函数时应注意的问题
(1) scanf()函数地址到表中的各个参量都是变量地址,而不是变量名
(2)如果在“格式控制”字符串中除了格式说明以外还有其他字符,则输入数据时在对应位置应输入与这些字符相同的字符,
(3)对于实型数据,输入时不能规定其精度。
(4)在用“%c”格式输入字符时,空格字符和转义字符都将作为有效的字符输入
(5)在输入数值型数据时,若遇到空格、按Enter键或Tab键,则认为输入数据结束,遇宽度结束;与非法输入也认为输入数据结束
(6)在格式控制符中加入星号时, scanf()函数将读入对应数值,但不赋给相应变量
字符数据的输入与输出
putchar()
putchar()的一般形式为
putchar(c)
功能:向终端输出一个字符。其中c可以是字符型或整型变量或表达式
如果c为字符型,则输出其值字符;如果c为整型,则输出 ASCII码值对应参数c的字符
getchar()
调用格式 getchar ()
功能:是从键盘读取单个字符,执行该函数时,机器等待用户从键盘输人一个字符
然后再按回车键,输入才生效并返回其值。可以用字符型或整型变量接收该函数的函数值,也可以直接将其作为一个操作数参与运算
使用getchar()函数需要注意以下回题:
getchar()函数没有参数
getchar(函数只能接收一个字符(包括控制字符)
转义字符 用来标识用一般字符不便于直接表示的控制代码
转义字符 |
含义 |
ASCII值 |
\n |
换行 |
10 |
\t |
横向跳格 |
9 |
\v |
竖向跳格 |
11 |
\b |
退格 |
8 |
\r |
回车,将当前位置移到本行开头 |
13 |
\f |
换页 |
12 |
\\ |
反斜线 |
92 |
\’ |
单引号 |
39 |
\” |
双引号 |
34 |
\a |
鸣铃 |
7 |
\ooo |
1~3位八进制所代表的字符 |
oo八进制数 |
\xhh |
1~2位十六进制所代表的字符 |
hh十六进制数 |
字符串的输入输出
处理可以利用printf()与scanf()外,还可以使用以下函数进行输入/输出
输入 gets(数组名);与scanf()的区别:scanf()输入的字符串中不能含有空格,原因是scanf()以空格和回车作为字符串结束的标志,而gets()函数可以包含空格,他以回车做结束标志
输出puts(字符数组名);与printf()的区别:printf()在输出字符串中光标不自动换行,而gets()函数自动换行
关于文件的输入输出放在文件操作中写
下节链接https://blog.csdn.net/chaolingw/article/details/79845279