前言
一、字符输入输出函数
1.字符输出函数2.字符输入函数 二、格式输出函数printf()
1.格式输出函数的一般形式2.格式控制 三、格式输入函数scanf()
1.格式输入函数的一般形式;2.格式控制 四、字符串输入输出函数
1.字符串输出函数puts()2.字符串输入函数gets()3.字符串输入函数fgets()
前言
C语言本身不提供输入/输出语句,输入输出功能由C语言的标准输入输出(I/O)库函数提供。这样处理,一方面可以使得C语言的内核比较精炼,另一方面也为C语言程序具有可移植性打下了基础。C语言的输入输出语句就是库函数调用语句。
C语言有很丰富的输入输出库函数,有用于键盘输入和显示器输出的输入输出库函数、磁盘文件读写的输入输出库函数、硬件端口操作的输入输出库函数等。本节主要介绍用于键盘输入和显示器输出的输入输出库函数中的字符输入输出库函数和格式化输入输出库函数,其对应的头文件为“studio.h”。
一、字符输入输出函数 1.字符输出函数函数原型:int putchar(int);
函数功能:向标准输出设备(一般为显示器)输出一个字符,并返回输出字符的ASCII码值。函数的参数可以是字符常量、字符型变量或整型变量,即将一个整型数作为ASCII编码,输出相应的字符。
#includevoid main(){ int i=97; char ch='a': putchar(i); putchar('n'); putchar(ch); }
程序运行结果为:
a a2.字符输入函数
函数原型:int getchar(void)
函数功能:从输入设备(一般为键盘)上输入一个字符,函数的返回值是该字符的ASCII编码值。
字符输入函数每调用一次,就从标准输入设备上取一个字符。函数值可以赋给一个字符变量,也可以赋给一个整型变量。
#include#include void main(){ int ch; ch=getchar(); putchar('='); putchar(ch); putchar('n'); system("pause");
运行该程序时,输入如下:
a
则变量ch的值为97。程序执行后输出的结果为:
=a
注意:
- 执行getchar()输入字符时,键入字符后需要敲回车键,回车后,程序才会响应输入,继续执行后续语句。putchar(n’)输出换行符。
字符输入和字符输出函数使用非常方便。但每一条语句只能输入或输出一个字符。
函数原型:int printf(char*format[,argument,…]);
函数功能:按规定格式向输出设备(一般为显示器)输出数据,并返回实际输出的字符数;若出错,则返回负数。
它使用的一般形式为:
2.格式控制printf("格式控制字符串”,输出项列表);
格式说明部分由“%”和“格式字符串”组成。它表示按规定的格式输出数据。
格式说明的形式为:%[flags][width][. prec][F]N]h|L]type
各部分说明如下。
[]表示该项为可选项,即可有可无。例如:printf(“%d”,100);
flags为可选择的标志字符,常用标志字符有:
— 左对齐输出;默认为右对齐输出。
+ 正数输出加号(+),负数输出减号(一)。
空格 正数输出空格代替加号(+),负数输出减号(一)。
width 为可选择的宽度指示符。十进制正整数表示,用来设置输出值的最少字符个数。不足则补空格;多出则按实际输出。默认则按实际输出。例如:
printf("%8dn", 100);
printf("%6dn", 100);
printf("%-8d n", 100);
printf("%+8dn", 100);
输出结果:
□□□□□100 □□□100 100□□□□□ □□□□+100
[.prec]为可选的精度指示符,“小数点”加“十进制正整数”表示,对“整数”、“实数*“字符串”的输出有如下功能:对“整数”,表示至少要输出的数字个数,不足补数字0,多则原样输出;对“实数”,表示小数点后至多输出的数字个数,不足则补数字0,多则作舍入处理;对“零符串”,表示最多输出的字符个数,不足补空格,多则丢弃。
printf("%8.2fn",3.14159);
printf(”%8.5fn”,3.14159);
输出结果:
□□□□3. 14 □3. 14159
type为格式字符,用来进行格式转换
三、格式输入函数scanf() 1.格式输入函数的一般形式;函数原型:int scanf(char*format[,argument,…]);
函数功能:按规定格式从键盘输入若干任何类型的数据给argument所指的单元。这回读入并赋给argument的数据个数;遇文件结束返回EOF;出错返回0。
它使用的一般形式为:
2.格式控制scanf(“格式控制字符串”,地址列表);
格式控制由格式控制字符串实现。格式控制字符串由格式字符和普通字符两部分组成。
格式字符格式字符串形式为:%[*][width][F]N][h|I]type
与printf函数的格式符有相同之处,也有不同之处:
- “*”为输入赋值抑制字符,表示该格式说明要求输入数据,但不赋值,也即在地址列表中没有对应的地址项。例如:
scanf(”%3d%*5d%f",&a,&x);
如果语句执行时输入:
2001200 4.1
则200传给a,4.1传给x,1200不赋给任何变量。
- width为宽度指示符,表示该输入项最多可输入的字符个数。如遇空格或不可转换的字符,读入的字符将减少。例如:
scanf(”%3d%5d%f",&.a,&.b,&.x);
如语句执行时输入:
2001200 4.1
则200传给a,1200传给b,4.1传给x;
%3d控制第一个数据只取3个字符,所以将前面3个字符转换成整型数200;
%5d控制第二个数据,但从输入流中截取了4个字符后,遇到空格,因此第二个数据只得到了4位数。
scanf()函数指定输入数据所占的宽度时,将自动按指定宽度来截取数据。例如:
scanf("%2d%3d",&a,&b);
若输入数据为:1223100
则scanf()函数截取两位数的整数12存入地址&a,截取231存入地址&b中。
用scanf()函数输入实数,格式说明符为%f,但不允许规定精度)例如:
%10.4f
是错误的。
关于字符串的输入输出,除了用scanf函数和printf函数外,C库中还提供了专门的字符串处理函数。
1.字符串输出函数puts()函数原型:int puts(const char*s)
功能:在标准输出上显示字符串s
参数:s为需要输出的字符串
返回值:成功返回一个非0的数字;失败返回-1或EOF
示例程序如下:
#includeint main() { char s[]="welcome"; puts(s); return 0 }
程序执行结果如下:
welcome
可以看出,puts函数在输出字符串时,会自动追加换行符’n’。使用时,注意字符数组必须以’ ’结束。
2.字符串输入函数gets()函数原型:char gets(char*s)
功能:从键盘输入一以回车结束的字符串放入字符数组中,并自动加’ ’°
参数:s为字符数组,存储输入的字符串
返回值:成功返回字符数组的起始地址,失败或输入结束返回NULL示例程序如下:
#include#define N 20 int main() { int i=0; char s[N]={O}; printf(">"); while(gets(s)!=NULL) { printf(">"); //scanf("%s",s); printf("i=%d:%sn",i,s); i++; } printf(”end mainn"); return 0; }
程序执行结果如下:
>how are you >i=0:how are you aa bb cc >i=1:aabb cc end main
编译这个程序时,出现了下面的警告:
warning:the'gets'function is dangerous and should not be used.
gets函数的参数中,不含长度控制。当输入字符时,最多只能输入N-1(留一个位置存字符串的结束符 )。假如输入字符超过了N-1,则多余的符号也会被存到字符数组中,这样就会造成内存的访问越界,结果是不可预料的。所以,使用此函数时,会有警告。我们在使用该函数时,一定要注意数组的长度。
还可以看出,gets函数并不以空格作为字符串输入结束的标志,而只以回车作为输入结束。这是与scanf函数不同的。
为了解决越界问题引入fgets()函数;
函数原型:char *fgets(char *restrict str, int size, FILE *restrict stream)
可以理解为(“容器的地址”, “容器的大小”, “从哪里读取”)
一般用法:
char a[100] = {0};
fgets(a, 100, stdin);



