《C语言标准输入输出详解.pdf》由会员分享,可在线阅读,更多相关《C语言标准输入输出详解.pdf(17页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、CCCC 输入输出函数输入输出函数输入输出函数输入输出函数本节主要介绍 Turbo C2.0 标准输入输出函数和文件的输入输出函数。通过本节的学习可以使读者掌握Turbo C2.0 的屏幕输出、键盘输入输出以及磁盘文件的读写函数,并能开始进行一些简单的程序的编写。控制流程语句主要包括:条件语句、循环语句和开关语句。1.1标准输入输出函数 1.1.1 格式化输入输出函数 Turbo C2.0 标准库提供了两个控制台格式化输入、输出函数printf()和scanf(),这两个函数可以在标准输入输出设备上以各种不同的格式读写数据。printf()函数用来向标准输出设备(屏幕)写数据;scanf()函
2、数用来从标准输入设备(键盘)上读数据。下面详细介绍这两个函数的用法。一、printf()函数 printf()函数是格式化输出函数,一般用于向标准输出设备按规定格式输出信息。在编写程序时经常会用到此函数。printf()函数的调用格式为:printf(,);其中格式化字符串包括两部分内容:一部分是正常字符,这些字符将按原样输出;另一部分是格式化规定字符,以%开始,后跟一个或几个规定字符,用来确定输出内容格式。参量表是需要输出的一系列参数,其个数必须与格式化字符串所说明的输出参数个数一样多,各参数之间用,分开,且顺序一一对应,否则将会出现意想不到的错误。1.格式化规定符 Turbo C2.0 提
3、供的格式化规定符如下:符号作用%d十进制有符号整数%u十进制无符号整数%f浮点数%s字符串%c单个字符%p指针的值%e指数形式的浮点数%x,%X无符号以十六进制表示的整数%0无符号以八进制表示的整数%g自动选择合适的表示法说明:(1).可以在%和字母之间插进数字表示最大场宽。例如:%3d表示输出 3 位整型数,不够 3 位右对齐。%9.2f 表示输出场宽为 9 的浮点数,其中小数位为 2,整数位为 6,小数点占一位,不够 9 位右对齐。%8s表示输出 8 个字符的字符串,不够 8 个字符右对齐。如果字符串的长度、或整型数位数超过说明的场宽,将按其实际长度输出。但对浮点数,若整数部分位数超过了说
4、明的整数位宽度,将按实际整数位输出;若小数部分位数超过了说明的小数位宽度,则按说明的宽度以四舍五入输出。另外,若想在输出值前加一些 0,就应在场宽项前加个 0。例如:%04d表示在输出一个小于 4 位的数值时,将在前面补 0 使其总宽度为 4 位。如果用浮点数表示字符或整型量的输出格式,小数点后的数字代表最大宽度,小数点前的数字代表最小宽度。例如:%6.9s 表示显示一个长度不小于6 且不大于 9 的字符串。若大于 9,则第 9 个字符以后的内容将被删除。(2).可以在%和字母之间加小写字母 l,表示输出的是长型数。例如:%ld表示输出 long 整数%lf表示输出 double 浮点数 (3
5、).可以控制输出左对齐或右对齐,即在%和字母之间加入一个-号可说明输出为左对齐,否则为右对齐。例如:%-7d表示输出 7 位整数左对齐%-10s 表示输出 10 个字符左对齐 2.一些特殊规定字符字符作用 n换行 f清屏并换页 r回车 t Tab符 xhh表示一个 ASCII 码用 16 进表示,其中 hh 是 1 到 2 个 16 进制数由本节所学的 printf()函数,并结合上一节学习的数据类型,编制下面的程序,以加深对 Turbo C2.0 数据类型的了解。例 1#include#include int main()char c,s20,*p;int a=1234,*i;float f
6、=3.141592653589;double x=0.12345678987654321;p=How do you do;strcpy(s,Hello,Comrade);*i=12;c=x41;printf(a=%dn,a);/*结果输出十进制整数a=1234*/printf(a=%6dn,a);/*结果输出 6 位十进制数a=1234*/printf(a=%06dn,a);/*结果输出 6 位十进制数a=001234*/printf(a=%2dn,a);/*a超过 2 位,按实际值输出 a=1234*/printf(*i=%4dn,*i);/*输出 4 位十进制整数*i=12*/printf
7、(*i=%-4dn,*i);/*输出左对齐 4 位十进制整数*i=12*/printf(i=%pn,i);/*输出地址 i=06E4*/printf(f=%fn,f);/*输出浮点数 f=3.141593*/printf(f=6.4fn,f);/*输出 6 位其中小数点后 4位的浮点数 f=3.1416*/printf(x=%lfn,x);/*输出长浮点数x=0.123457*/printf(x=%18.16lfn,x);/*输出 18 位其中小数点后16 位的长浮点数 x=0.1234567898765432*/printf(c=%cn,c);/*输出字符 c=A*/printf(c=%xn
8、,c);/*输出字符的 ASCII 码值c=41*/printf(s=%sn,s);/*输出数组字符串s=Hello,Comrade*/printf(s=%6.9sn,s);/*输出最多 9 个字符的字符串 s=Hello,Co*/printf(s=%pn,s);/*输出数组字符串首字符地址 s=FFBE*/printf(*p=%sn,p);/*输出指针字符串 p=How doyou do*/printf(p=%pn,p);/*输出指针的值 p=0194*/getch();retunr 0;上面结果中的地址值在不同计算机上可能不同。例 1.中第一条语句#include的含义是调用另一个文件st
9、dio.h,这是一个头文件,其中包括全部标准输入输出库函数的数据类型定义和函数说明。Turbo C2.0 对每个库函数便用的变量及函数类型都已作了定义与说明,放在相应头文件*.h中,用户用到这些函数时必须要用#include或#include*.h语句调用相应的头文件,以供连接。若没有用此语句说明,则连接时将会出现错误。二、scanf()函数 scanf()函数是格式化输入函数,它从标准输入设备(键盘)读取输入的信息。其调用格式为:scanf(,);格式化字符串包括以下三类不同的字符;1.格式化说明符:格式化说明符与 printf()函数中的格式说明符基本相同。2.空白字符:空白字符会使 sc
10、anf()函数在读操作中略去输入中的一个或多个空白字符。3.非空白字符:一个非空白字符会使scanf()函数在读入时剔除掉与这个非空白字符相同的字符。地址表是需要读入的所有变量的地址,而不是变量本身。这与printf()函数完全不同,要特别注意。各个变量的地址之间同,分开。例 2:main()int i,j;printf(i,j=?n);scanf(%d,%d,&i,&j);上例中的 scanf()函数先读一个整型数,然后把接着输入的逗号剔除掉,最后读入另一个整型数。如果,这一特定字符没有找到,scanf()函数就终止。若参数之间的分隔符为空格,则参数之间必须输入一个或多个空格。说明:(1).
11、对于字符串数组或字符串指针变量,由于数组名和指针变量名本身就是地址,因此使用 scanf()函数时,不需要在它们前面加上&操作符。例 3 mian()char*p,str20;scanf(%s,p);/*从健盘输入字符串*/scanf(%s,str);printf(%sn,p);/*向屏幕输出字符串*/printf(%sn,str);(2).可以在格式化字符串中的%各格式化规定符之间加入一个整数,表示任何读操作中的最大位数。如例 3 中若规定只能输入 10 字符给字符串指针 p,则第一条scanf()函数语句变为 scanf(%10s,p);程序运行时一旦输入字符个数大于10,p 就不再继续读
12、入,而后面的一个读入函数即 scanf(%s,str)就会从第 11 个字符开始读入。实际使用 scanf()函数时存在一个问题,下面举例进行说明:当使用多个 scanf()函数连续给多个字符变量输入时,例如:main()char c1,c2;scanf(%c,&c1);scanf(%c,&c2);printf(c1 is%c,c2 is%c,c21,c2);运行该程序,输入一个字符 A 后回车(要完成输入必须回车),在执行 scanf(%c,&c1)时,给变量 c1 赋值A,但回车符仍然留在缓冲区内,执行输入语句scanf(%c,&c2)时,变量 c2 输出的是一空行,如果输入 AB 后回车
13、,那么输出结果为:c1 is A,c2 is B。要解决以上问题,可以在输入函数前加入清除函数fflush()(这个函数的使用方法将在本节最后讲述)。修改以上程序变成:#include main()char c1,c2;scanf(%c,&c1);fflush(stdin);scanf(%c,&c2);printf(c1 is%c,c2 is%c,c1,c2);1.1.2 非格式化输入输出函数非格式化输入输出函数可以由上面讲述的标准格式化输入输出函数代替,但这些函数编译后代码少,相对占用内存也小,从而提高了速度,同时使用也比较方便。下面分别进行介绍。一、puts()和 gets()函数 1.p
14、uts()函数 puts()函数用来向标准输出设备(屏幕)写字符串并换行,其调用格式为:puts(s);其中 s 为字符串变量(字符串数组名或字符串指针)。puts()函数的作用与语 printf(%sn,s)相同。例 4:main()char s20,*f;/*定义字符串数组和指针变量*/strcpy(s,Hello!Turbo C2.0);/*字符串数组变量赋值*/f=Thank you;/*字符串指针变量赋值*/puts(s);puts(f);说明:(1).puts()函数只能输出字符串,不能输出数值或进行格式变换。(2).可以将字符串直接写入puts()函数中。如:puts(Hello
15、,Turbo C2.0);2.gets()函数 gets()函数用来从标准输入设备(键盘)读取字符串直到回车结束,但回车符不属于这个字符串。其调用格式为:gets(s);其中 s 为字符串变量(字符串数组名或字符串指针)。gets(s)函数与 scanf(%s,&s)相似,但不完全相同,使用scanf(%s,&s)函数输入字符串时存在一个问题,就是如果输入了空格会认为输入字符串结束,空格后的字符将作为下一个输入项处理,但 gets()函数将接收输入的整个字符串直到回车为止。例 5 main()char s20,*f;printf(Whats your name?n);gets(s);/*等待输
16、入字符串直到回车结束*/puts(s);/*将输入的字符串输出*/puts(How old are you?);gets(f);puts(f);说明:(1).gets(s)函数中的变量 s 为一字符串。如果为单个字符,编译连接不会有错误,但运行后会出现Null pointer asignmemt的错误。二、putchar()、getch()、getche()和 getchar()函数 1.putchar()函数 putchar()函数是向标准输出设备输出一个字符,其调用格式为:putchar(ch);其中 ch 为一个字符变量或常量。putchar()函数的作用等同于 printf(%c,ch
17、);例 6:#include main()char c:/*定义字符变量*/c=B;/*给字符变量赋值*/putchar(c);/*输出该字符*/putchar(x42);/*输出字母 B*/putchar(0 x42);/*直接用 ASCII 码值输出字母 B*/从本例中的连续四个字符输出函数语句可以分清字符变量的不同赋值方法。2.getch()、getche()和 getchar()函数 (1)getch()和 getche()函数这两个函数都是从键盘上读入一个字符。其调用格式为:getch();getche();两者的区别是:getch()函数不将读入的字符回显在显示屏幕上,而 getc
18、he()函数却将读入的字符回显到显示屏幕上。例 7:#include main()char c,ch;c=getch();/*从键盘上读入一个字符不回显送给字符变量 c*/putchar(c);/*输出该字符*/ch=getche();/*从键盘上带回显的读入一个字符送给字符变量 ch*/putchar(ch);利用回显和不回显的特点,这两个函数经常用于交互输入的过程中完成暂停等功能。例 8:#include main()char c,s20;printf(Name:);gets(s);printf(Press any key to confinue.);getch();/*等待输入任一键*/(2)getchar()函数 getchar()函数也是从键盘上读入一个字符,并带回显。它与前面两个函数的区别在于:getchar()函数等待输入直到按回车才结束,回车前的所有输入字符都会逐个显示在屏幕上。但只有第一个字符作为函数的返回值。getchar()函数的调用格式为:getchar();例 9:#include main()char c;c=getchar();/*从键盘读入字符直到回车结束*/putchar(c);/*显示输入的第一个字符*/getch();/*等待按任一健*/需要头文件#include