C语言本身不提供输入输出语句,输入和输出操作是由函数来实现的。
在使用C语言库函数时,需要预编译命令#include ,将有关"头文件"包含到源文件中。
字符数据的输入输出
putchar 函数(字符输入函数)
putchar 函数的作用是向终端输出一个字符,并返回输出字符的ASCLL 码的值。
例如: putchar(c);
输出字符变量c的值,c可以是字符型或整型,在使用该函数时,要在程序开头部分加上:#include "stdio.h" 或 #include<stdio.h>
getchar 函数(字符输入函数)
该函数的作用:从终端输入一个字符,并将输入的字符返回到一个字符型变量中。
一般形式: getchar()
注意:
- getchar 函数只能接收
一个 字符,输入字符后需要按回车键,程序才会完成相应的输入,继续执行后面的语句。 - 如果需要连续输入几个字符,在输入时,用户连续输出字符,最后一次输入完成后,回车即可!同时也要在程序开头部分加上:
#include "stdio.h" 或 #include<stdio.h>
printf 函数(格式输出函数)
作用:向终端(或系统隐含指定的设备输出设备),输出若干个任意类型的数据。
一般格式:printf("格式控制字符串",输出列表项);
格式控制字符:是用双引号括起来的字符串,他包括两种信息
- 格式说明:由"
% "和格式字符 组成,作用是将输出的数据按照制定的格式输出。 - 普通字符:即需要按照原样输出的字符。普通字符包括可普通字符和转义字符,转义字符需要转义后输出!
输出列表:是需要输出的一些数据,可以是常量、变量、表达式,个数可以是零个、一个、多个,每个输出项之间用逗号分隔。
例如: printf("%d,%d",a,b); #输出a b的值
格式字符
对不同的数据类型需要用不同的格式字符。
主要有以下几种格式字符:
d格式符:用来输出十进制数,有以下几种用法:
%d ,按整型数据的实际长度输出%md , m为指定输出数据的宽度(域宽)。如果数据的位数小于m,则左补空格右端输出,若大于m,则按实际位数输出。%-md , 如果串长小于m或数据的位数小于m,则左端输出右补空格,若大于m,则按照实际位数输出。%ld , 输出长整型数据。
o格式符:以8进制数 形式输出整数,输出的数值不带符号,即将符号位也以一起作为八进制数的一部分输出。
x格式符:以十六进制数 形式输出整数。与o格式一样不会出现负的16进制数。
u格式符:用来输出unsigned型数据,即无符号位,以十进制形式 输出。 
c格式符:用来输出一个字符。
- 一个整数,只要它的值在0-255范围内,也可以用字符形式输出,在输出前,将该整数转换为相应的ASCLL码字符;反之,一个字符数据也可以用整数形式输出。

s格式符:用来输出一个字符串。
%s , 输出字符串%ms , 输出的字符串占m列,如字符串本身的长度大于m,则突破m的限制,将字符串全部输出。若串长小于m,则左补空格。%-ms , 如果串长小于m,则在m列范围内,字符串向左靠,右补空格。%m.ns , 输出占m列,但只取字符换左端n个字符。这个n个字符输出在m列的右侧,左补空格。%-m.ns , 其中m,n含义同上,n个字符输出在m列范围的左侧,右补空格。

f格式符:用来输出实数(包括单%f,双精度%lf),以小数形式输出。
%f , 不指定字段宽段,由系统自动指定,使整数部分全部如数输出,并输出6位小数,第七位四舍五入。单精度实数的有效位数一般为7位。  显然,只有前七位数字是有效数字。千万不要以为凡是打印出来的数字都是准确的。双精度也可以用%f格式输出,它的有效位数一般为16位,输出小数6位。%m.nf , 指定输出的数据共占m列(含小数点),其中有n位小数,如果数值长度小于m,则左端补空格。%-m.nf , 与 %m.nf 基本相同,只是使输出的数值向左端靠,右端补空格。 
e格式符:以指数形式输出实数。
%e , 不指定输出数据所占宽度和数字部分小数位数,由系统自动指定给出6位小数,指数部分占5位(如e+002),其中"e"占一位,指数符号占一位,指数占3位。数值按标准化指数形式输出(即小数点前必须有而且只有一位非零数字)。
例如: 1.234560e+002 # 也就是说用%e格式输出的实数共占13列宽度
- %m.ne 和 %-m.ne , m、n和"-"字符含义与前相同。此处n指数据的数字部分(又称尾数)的小数位数。

总结
格式字符 | 说明 |
---|
d | 以带符号的十进制形式输出整数(正数不输出符号)。 | o | 以8进制无符号形式输出整数(不输出前导符0)。 | x(X) | 以16进制无符号形式输出整数(不输出前导符0x)。 | u | 以无符号10进制形式输出整数。 | c | 以字符形式输出,只输出一个字符。 | s | 输出字符串。 | f | 以小数形式输出单、双精度数,隐含输出6位小数。 | e(E) | 以标准指数形式输出单、双精度数,数字部分小数位数为6位。 |
格式说明中,在%和上述格式字符间可以插入以下几种附加符号
字符 | 说明 |
---|
字母l(L) | 用于长整型整型,可加在格式符d、o、X、u前面。 | m(代表一个正整数) | 数据最小宽度。 | .n(代表一个正整数) | 对实数,表示输出n位小数;对字符串,表示截取的字符个数。 | - | 输出的数字或字符在域内向左靠。 |
在用printf函数输出时,务必注意数据类型应与上述格式说明匹配,否则将会出现错误!!
在使用printf函数时,还有几点要说明:
-
系统要求除e(E)格式和x(X)格式外,字符要用小写字母,如%d不能写成%D。 -
可以在printf函数中的“格式控制”字符串内包含“转义字符”。 -
如果想输出字符“%”,则应该在“格式控制”字符串中用连续两个%表示
如: print("%f%%",1.0/3); # 输出.33333%
scanf函数(格式输入函数)
一般形式:
scanf("格式控制字符串",输入项地址列表)
- ?格式控制字符串规定数据的输入格式,其内容与printf函数相同,包含格式说明符和普通字符(原样输入)。
- ?输入项地址列表则由 一个或多个变量地址组成,可以是变量的地址,或字符串(数组)的首地址。
格式说明:
- 和printf函数中的格式说明相似,以%开始,以一个格式字符结束,中间可以插入附加的字符。
格式字符 | 说明 |
---|
d | 用来输入有符号十进制整数。 | u | 用来输入无符号十进制整数。 | o | 用来输入八进制整数。 | x(X) | 用来输入十六进制整数。 | c | 用来输入单个字符。 | s | 用来输入字符串,将字符串送到一个字符数组中,在输入时以非空白字符开始,以第一个空白字符结束。字符串以串结束标志“\0”作为其最后一个字符。 | f | 用来输入实数,可以用小数形式或指数形式输入。 | e(E) | 与f作用相同,e与f可以互相替换。 | l(L) | 用于输入长整型数据(可用%1d, %10, %1x), 以及doubel型数据(用%1f或%1e) . | h | 用于输入短整型数据(可用%hd, %ho, %hx) | 域宽m(为一正整数) | 指定输入数据所占宽度 (列数)。 | * | 表示本输入项在读入后不赋给相应的变量。 |
说明
- 对于unsigned型变量的数据,可以使用
%u , %d 或%0 、%x 格式输入。 - 可以指定输入数据所占列数,系统自动按他截取所需数据。
如: scanf("%3d%3d",&a,&b) # 输入 123456 系统自动将123赋值给a,将456赋值给b
- %后的"
* "附加说明符,* 表示按规定格式输入但不赋予相应的变量,作用是跳过相应的数据,即在地址列表中没有对应的输入项。

例如: scanf("%7.2f",&a);
scanf 函数在执行时应注意的问题
(1) scanf函数中的“格式控制”后面应当是变量地址,而不应是变量名。
(2)如果在“格式控制”字符串中除了格式说明以外还有其它普通字符,与printf函数的普通字符不同,scanf 函数的格式控制字符串中普通字符是不显示的,而是规定了输入时必须输入的字符,即在输入时,格式控制字符串中的字符要原样输入。
(3)在用“%c”格式输入字符时,空格字符和“转义字符”都作为有效字符输入。
(4)输入的数据之间需要添加分隔符。如果在格式控制串中设定了分隔符,则按设定的分隔符输入数据,如果没有分隔符,在输入数据时,遇以下情况时该数据认为结束:
-
①遇空格,或按“回车”或“跳格”(TAB)键。 -
②遇宽度结束,如“%3d";只取3列。laduob -
③非法输入。如scanf("%d%c%f" ,&a,&b,&c);
 (5)格式控制串中设定的输入类型应该与变量类型一致,否则变量的值会出现问题。
|