《C语言数据的输入输.ppt》由会员分享,可在线阅读,更多相关《C语言数据的输入输.ppt(48页珍藏版)》请在三一办公上搜索。
1、第3章 数据的输入与输出(2),3.4.3 字符输入输出函数3.4.4 格式化输入输出函数的一般使用,数据输入输出的概念,所谓输入输出是以计算机主机为主体而言的。输出:从计算机向外部输出设备(显示器,打印机)输出数据。输入:从输入设备(键盘,鼠标,扫描仪)向计算机输入数据C语言本身不提供输入输出语句,输入和输出操作是由C函数库中的函数来实现的例如:字符输入函数:getchar 字符输出函数:putchar格式输入函数:scanf 格式输出函数:printf字符串输入函数:gets 字符串输出函数:puts,字符输入输出函数,putchar(x)函数:有参数例:putchar(ch);putch
2、ar(A);putchar(65);每句只能输出一个字符数据。getchar()函数:无参数从键盘读入一个字符(空格回车都算)。程序执行到 getchar函数时,等待输入字符,直到按回车才结束,回车前的所有输入字符都将逐个显示在屏幕上。但只有第一个字符被getchar函数接收。c=getchar();按回车符才可送出当使用这两个函数时,在程序的开头一定要加上:#include,字符输入输出函数,getch()函数:无参数。getch()的作用与getchar类似,都是从标准输入设备(通常指键盘)读入一个字符。其调用形式分别为:getch();但getch函数读入的字符不会回显在屏幕上,它与ge
3、tchar函数不同之处在于:getch函数不必输入回车才结束,只要输入任意一个键,该字符立即被接收,程序继续执行下一条语句。利用这一特点,这两个函数经常用于交互输入的过程中实现暂停功能,或直接查看程序运行结果。,字符输入输出函数,补充例题#include main()char ch;ch=getchar();putchar(ch);putchar(n);printf(%c,%dn,ch,ch);getch();/*等待按任一键程序结束*/,当屏幕输入12345回车时屏幕输出的结果是什么?,此语句可否用:scanf(“%c“,例:输出单个字符#include stdio.hmain()char
4、a,b,c;a=A;b=B;c=C;clrscr();putchar(a);putchar(b);putchar(c);putchar(n);putchar(a);putchar(n);putchar(b);putchar(n);putchar(c);,每次只能输出一个字符putchar();输出空格,运行结果:ABC A B C,字符输入输出函数,putchar(101);A,例 输入单个字符。#include stdio.hmain()char c;c=getchar();putchar(c);putchar(n);,字符输入输出函数,格式输入函数与格式输出函数,printf函数是格式化输
5、出函数,用于向标准输出设备(通常指定为屏幕)按规定格式输出数据。printf函数的调用格式为:printf(格式控制字符串,输出列表);其中格式化字符串包括两部分内容:一是普通字符按原样输出,转义字符输出它所代表的字符;二是“输出格式说明”,以“%”开始,后跟格式字符,用来指定输出数据的格式。如%d 输出int型数据 输出列表是若干个需要输出的数据项,称为函数的参数,可以是常量、变量或表达式,各参数之间用,分开。,格式化输出函数printf(),printf函数的输出格式说明 每个格式说明都必须用%开头,以一个格式字符作为结束,在此之间根据需要可以插入宽度说明、长度修饰符l和L等。(1)格式字
6、符:格式字符用于规定输出不同的数据类型,格式字符和它们的作用如下表,可详见附录D。,格式化输出函数printf(),格式化输出函数printf(),(2)长度修饰符:长度修饰符加在%和格式字符之间。,从上表可知:双精度实型数据的输出不要用%lf,只要用%f即可。但长双精度实型数据的输出必须加长度修饰符L,例如%Lf、%Le等。,(3)#修饰符:使用%#o、%#x,在输出的八进制或十六进制前加前导“0”。例如:main()unsigned c=65535;printf(%#on,c);printf(%#xn,c);,格式化输出函数printf(),输出结果如下:01777770 xffff,格式
7、化输出函数printf(),(4)在输出的数字前加+号 使用%+格式字符(如%+d、%+f等),可在输出的数字前加+号,例如 printf(%+d,%+10.2f,123,12345.678);输出结果如下:+123,+12345.68。例:int x=1234,y=123,z=12;printf(%4d+%3d+%2d,x,y,z)输出结果:1234+123+12,格式化输出函数printf(),(5)输出数据所占的宽度整型数据的输出宽度%md、%mu、%mo、%mx,按m宽度输出数据,不足m个位数,左补空格(数据右对齐)。实型数据的输出宽度%m.nf、%m.ne、%m.ng,数据输出的总宽
8、占m列,其中小数部分占n列,若数据自身宽度小于m列,则左补空格。字符串的输出宽度%ms 输出宽度占m列,若字符串宽度小于m列,左补空格,若字符串宽度大于m列则原样输出字串。,整型数据的输出宽度,main()int a=34,b=12345;clrscr();printf(%dn,a);printf(%10dn,a);printf(%-10dn,a);printf(%4dn,b);,实型数据的输出宽度,main()float a=123.456;clrscr();printf(a=%fn,a);printf(a=%4fn,a);printf(a=%15fn,a);printf(a=%.2fn,a
9、);printf(a=%.5fn,a);,格式化输出函数printf(),字符数据的输出宽度%mc输出宽度占m列,左补m-1个空格。在输出宽度m前加一个负号,则右补m-1个空格。表2.11举例说明字符型数据的输出。,格式化输出函数printf(),格式符。用来输出十进制整数。几种用法::按十进制整型数据的实际长度输出。:为指定的输出字段的宽度。如果数据的位数小于,则左端补以空格,若大于,则按实际位数输出。例:(,);若,则输出结果为,:输出长整型数据。例:;/*定义a为长整型变量*/(,);输出结果为,格式化输出函数printf(),(2)格式符。以八进制整数形式输出。输出的数值不带符号,符号
10、位也一起作为八进制数的一部分输出。例:int a=-1;printf(%d,%o,a,a);在内存单元中的存放形式(以补码形式存放)如下:输出为:,不会输出带负号的八进制整数。对长整数(型)可以用“”格式输出。还可以指定字段宽度,例:(,);输出为:177777。(数字前有2个空格),格式化输出函数printf(),(3)格式符。以十六进制数形式输出整数。同样不会出现负的十六进制数。例:;(,);输出结果为:ffff,可以用“”输出长整型数,也可以指定输出字段的宽度例:“”输出为:ffff。(数字前有8个空格),格式化输出函数printf(),(4)格式符,用来输出型数据.一个有符号整数(型)
11、也可以用格式输出;一个型数据也可以用格式输出。型数据也可用或格式输出。(5)格式符,用来输出一个字符。如:d;(,d);输出字符.一个整数,只要它的值在范围内,可以用“”使之按字符形式输出,在输出前,系统会将该整数作为ASCII码转换成相应的字符;一个字符数据也可以用整数形式输出。,格式化输出函数printf(),例 无符号数据的输出。#includemain()unsigned int a=65535;int b=-2;printf(a=%d,%o,%x,%un,a,a,a,a);printf(b=%d,%o,%x,%un,b,b,b,b);,运行结果:a=-1,177777,ffff,65
12、535b=-2,177776,fffe,65534,格式化输出函数printf(),例:字符数据的输出#include main()char c=a;int i=97;clrscr();printf(%c,%dn,c,c);printf(%c,%dn,i,i);getch();,运行结果:a,97a,97,格式化输出函数printf(),(6)s格式符 输出字符串.。例如:(,)输出字符串“”(不包括双引号)。%ms,输出的字符串占m列,若串长大于m,则全部输出,若串长 小于m,则左补空格。%-ms,若串长小于m,字符串向左靠,右补空格。%m.ns,输出占m列,只取字符串中左端n个字符,输出在
13、m列的 右侧,左补空格。%-m.ns,n个字符输出在m列的左侧,右补空格,若nm,m自 动取n值。,main()clrscr();printf(*%s*n,china);printf(*%8s*n,china);printf(*%-8s*n,china“);printf(*%5.3s*n,china“);printf(*%7.2s*n,china“);printf(*%.4s*n,china“);,运行结果:*china*china*china*chi*ch*chin*,格式化输出函数printf(),(7)格式符。用来以小数形式输出实数(包括单双精度)有以下几种用法:。不指定字段宽度,由系统
14、自动指定字段宽度,使整数部分全部输出,并输出位小数。应当注意,在输出的数字中并非全部数字都是有效数字。单精度实数的有效位数一般为位。.。指定输出的数据共占列,其中有位小数。如果数值长度小于,则左端补空格。.与.基本相同,只是使输出的数值向左端靠,右端补空格。,格式化输出函数printf(),例:输出单精度有效位数#include stdio.hmain()float x,y;x=111111.111;y=222222.222;clrscr();printf(%f,x+y);,运行结果:333333.328125,格式化输出函数printf(),例:输出双精度有效位数#include stdio
15、.hmain()float x,y;y=2222222222222.222222222;clrscr();printf(%f,x+y);,运行结果:3333333333333.333010,double x,y;,格式化输出函数printf(),例 输出实数时指定小数位数。#include stdio.hmain()float a=123.456;clrscr();printf(*%f*,*%10f*,*%10.2f*n,a,a,a);printf(*%-10.2f*,*%.2f*n,a,a);,运行结果:*123.456001*123.456001*123.46*123.46*123.46*
16、,main()float a=123.456;clrscr();printf(a=%en,a);printf(a=%10en,a);printf(a=%10.2en,a);printf(a=%-10.2en,a);printf(a=%.2en,a);,(8)格式符,以指数形式输出实数,格式化输出函数printf(),格式化输出函数printf(),(9)格式符,用来输出实数.它根据数值的大小,自动选格式或格式(选择输出时占宽度较小的一种),且不输出无意义的零。例:若a=123.456,则 printf(%f,a);123.456001 printf(%g,a);123.456,格式化输出函数p
17、rintf(),(二)调用printf函数的注意事项1、格式说明与输出项从左到右,类型必须一一对应,若类型不匹配,系统不会给错误提示,#include stdio.hmain()int a=34;float b=5.3;clrscr();printf(%d,%dn,a,b);,运行结果:34,00是错误,系统不给提示,格式化输出函数printf(),2、格式说明与输出项个数相同,若不同,格式说明多,输出不定值;输出项多无用;printf(“%d%f”,a);左右两侧必须匹配,而且个数相同3、除格式说明外,其它合法字符“原样输出”;4、如需要输出%,则用两个连续的“%”输出,main()int
18、a=34;float b=5.3;clrscr();printf(%dn,a);,运行结果:%da 不起作用,格式化输入函数scanf(),scanf函数的功能是从标准输入流中按指定格式接收输入的数据;scanf函数的调用格式为:scanf(格式控制字符串,地址列表);格式控制字符串同printf地址列表是由若干个地址组成的表列,可以是变量的地址,或字符串的首地址,格式化输入函数scanf(),例:用scanf函数输入数据#include stdio.hmain()int a,b,c;clrscr();scanf(%d%d%d,a在内存中的地址&是地址运算符,通过scanf函数从键盘输入数据1
19、、当调用scanf函数从键盘输入数据时,最后一定要按下回车键,scanf函数才能接受键盘输入的数据;2、输入数据的数值:(1)从键盘输入数值数据时,输入的数值数据之间用间隔符隔开;(2)此处的间隔符可以是空格符、Tab、回车符;(3)如果在“格式控制”字符串中除了格式说明以外还有其他字符,则在输入数据时在对应位置应输入与这些字符相同的字符。如:3,4,5 否则会出现错误结果,scanf(“%d,%d,%d,格式化输入函数scanf(),3、在格式字符串中插入其它字符 如果想在屏幕上输入字符来提示,应该使用printf函数;如果用scanf格式控制字符串中插入其它字符,则输入时,要求按一一对应的
20、位置原样输入这些字符;#include stdio.hmain()int a,b,c;clrscr();printf(“input:a,b,cn“);scanf(%d%d%d,scanf(“input:a,b,c:%d%d%d,格式化输入函数scanf(),说明:1、TC环境下,输入long整数时,用%ld;输入double时,用lf;2、格式说明的类型和输入项类型,应该一一匹配;float a;scanf(“%d”,不合法,格式化输入函数scanf(),4、在用“”格式输入字符时,无需间隔符,在这里,回车、Tab、空格字符和“转义字符”都作为有效字符输入,#include stdio.hma
21、in()char a,b,c;clrscr();printf(input:n);scanf(%c%c%c,#include stdio.hmain()char a,b,c;printf(input:n);scanf(%c,%c,%c,键盘输入:abc,键盘输入:a,b,c,格式化输入函数scanf(),例:以下程序的运行结果是什么?,#include stdio.hmain()char c1,c2;int a,b;clrscr();scanf(%d%c%d%c,键盘输入:1 x 2 y会是什么结果?,正确输入:1x 2y,5、在格式输入串中,格式说明符的个数应该与输入项的个数相同,若格式符个数
22、少于输入项,scanf函数按格式符的项目结束输入,多余的输入项没有得到新的数据;若格式符的个数多于输入项,scanf函数按输入项的数据结束输入,多余的格式符不起作用;,格式化输入函数scanf(),main()int a,b,k,i;clrscr();scanf(%d%d,6、当输入数据少于输入项时,程序等待输入,直到满足要求为止,当输入的数据多于输入项时,多余数据并不消失,而是留做下一个输入操作的输入数据;,格式化输入函数scanf(),输入时个数不够,会到下一行取,太多个则放在缓冲区,如 scanf(%d%d,输入4 后,程序运行结果是:a=1,b=2,k=5852,i=3printf与s
23、canf对实数处理时的区别:,格式化输入函数scanf(),格式化输入函数scanf(),注意%c 用法:读1个字符(空格,回车键也算)。char c1,c2,c3;scanf(%c%c%c,才行。,格式化输入函数scanf(),例3.9用scanf函数输入数据#include void main()int i,j;float x,y,z;printf(Input two integers i and j separated by a space:);/*提示语句*/scanf(%d%d,课 堂 练 习,1已有如下定义和输入语句,int a;char c1,c2;scanf(%d%c%c,3函数putchar()的功能是向终端输出()。(A)一个字符(B)多个字符(C)一个关系表达式(D)一个实型变量值,4、已有定义:int x;执行下面语句的输出结果是()x=11/3;y=5;printf(“%d,%dn”,x,y);5、有以下程序段 int a=0,b=0,c=0;scanf(“%d”,执行语句时从键盘键入:226.59则变量a中的值是,b中的值是,c中的值是.,课 堂 练 习,