c语言输入和输出.pptx
1 通过终端输入(如键盘、鼠标等),也称为标准输入(standard input),直接向终端输出(如显示器、打印机等),也称为标准输出(standard output)。3.1 概述 C语言本身没有提供输入输出语句,C语言中的所有I/O操作都是通过函数调用来实现,而这些并非C语言一部分的输入输出函数均以目标级程序的方式提供,并存放在一个C标准函数库中。每一个标准库都有一个相应的头文件,该头文件包含了该库中所有函数的函数原型及其相关信息。在调用这些库函数时,要用预处理命令“#include”将有关的“头文件”包括到用户源程序中。标准输入输出库函数对应的头文件是“”。stdio是standard input&output的缩写。因此,读者在调用标准输入输出库函数时,你的源程序开头应该有如下编译预处理命令:#include 或#第1页/共22页23.2 字符输入输出函数3.2.1 字符输出函数putchar()putchar()函数是向屏幕一个字符,其调用格式为:putchar(ch);其中ch为一个字符变量、字符常量或整型常量。/*本程序测试多种类型数据作putchar()函数参数的输出情况*/#include main()char c=A;/*定义字符变量并初始化*/putchar(c);/*输出变量C的值即字符A*/putchar(A);/*输出字符A*/putchar(x41);/*输出字符A,它以转义字符表示,十六进制*/putchar(0 x41);/*直接用ASCII码值输出字符A*/putchar(101);/*输出字符A,它以转义字符表示,八进制*/第2页/共22页33.2.2 带缓冲区的字符输入函数getchar()getchar()函数的功能是从标准输入文件(通常是键盘,亦指磁盘文件)读取一字节代码(即一个字符),并回显。所谓回显,是指输入一个字符的同时又在屏幕上显示出该字符。这是标准C提供的字符输入函数,因此也是最常用的字符输入(尤其是键盘输入)函数。键盘缓冲区(实际上应该称作输入流即stdin 流)。所谓键盘缓冲区,是指在内存开辟的一片临时单元,用来暂时存放从键盘输入的字符。getchar()函数是带键盘缓冲区的输入函数,是指当从键盘输入字符时,这些字符先存放在键盘缓冲区,如果不敲回车键,getchar()函数并没有真正被执行(即所谓被激活);仅当回车键也被送入键盘缓冲区后,getchar()函数才从键盘缓冲区中读取一个字符。第3页/共22页4强调以下三点:(1)调用getchar()函数输入字符时,必须用另一个变量(字符变量或整型变量)接收输入的字符。例如:ch=getchar();(2)调用getchar()函数输入字符时,仅当敲入回车键后,函数才被激活。(3)调用该函数时,输入的每一个字符,包括空白符(即空格、制表符和回车符),都被送存到键盘缓冲区。第4页/共22页5/*本程序调用getchar()函数输入一个字符*/#include main()char c;/*定义字符变量*/c=getchar();/*接收键盘输入的一个字符*/putchar(c);/*输出该字符*/putchar(n);第5页/共22页6 3.2.3 不带缓冲区的字符输入函数getch()和getche()这是某些编译器,譬如Turbo C新增加的两个字符输入函数,这两个函数都是从键盘上读入一个字符。两者的区别是:getch()函数将读入的字符不回显在屏幕上,而getche()函数却将读入的字符回显到显示屏幕上。第6页/共22页7 /*本程序调用getchar()函数输入一个字符*/#include main()char c,ch;c=getch();/*从键盘上读一字符不回显送给变量c*/putchar(c);/*输出该字符*/ch=getche();/*从键盘读一字符送给变量ch并回显*/putchar(ch);/*输出该字符*/第7页/共22页83.3 格式化输入和输出函数3.3.1 printf()函数 用于按指定格式向标准输出设备(屏幕)输出。有两种形式:printf(字符串);例如,下面的语句:printf(How are you!n);是在屏幕上输出这样一行:How are you!这种形式的输出并没有指定输出格式。第8页/共22页9另一种形式是:printf(,)“格式控制串”是由0个或多个格式转换说明组成的一个字符串序列。格式转换说明的一般形式为:%flag width.prechlL输出格式符格式修饰符(见表3-2)见表3-1 printf(“%d”,a);printf(%d%f,a,x);printf(a=%d,b=%d,a+b=%dn,a,b,a+b);printf(“a=%-d,x=%+8.2f,x+y=%Lfn,a,x,x+y);左对齐 正数也要加正号 输出共占8位,其中小数占两位输出为long double型第9页/共22页103.3.2 scanf()函数 scanf()函数的一般形式为:int scanf(,)“格式控制串”是由0个或多个格式转换说明组成的一个字符串序列。格式转换说明的一般形式为:%*widthh/l/L输入格式符 格式修饰符(见表3-4)见表3-3 格式转换说明的作用是引导对下一输入项进行转换。“地址列表”中给出一个或多个输入项,输入项之间用逗号分隔。从概念上讲,输入项的表示形式是指针,指向存储输入数据的变量。因此,输入项必须指明变量的地址。C语言提供了一个取变量地址的运算符“&”,只要将它作用在变量上,就能得到该变量的地址。例如,&a,&b分别表示变量a和变量b 的地址。第10页/共22页11 例如,若要为int变量a和b从键盘输入数据,如果写作:scanf(%d%d,a,b);是不正确的。可用如下语句实现:scanf(%d%d,&a,&b);如果将上述语句应改为:scanf(%d,%d,&a,&b);即在两个格式转换说明之间插入一个逗号,输入数据时也必须输入一个逗号,如:123,4567 要注意的是,不要轻易将“c”格式与其它格式混在一起用,以免出错。例如,设a为int型变量,ch是char型变量,对于语句:scanf(%d%c,&a,&ch);若输入为 29A /*表示空格符*/其结果是将数值29送a,而将一个空格字符送ch。第11页/共22页12 3.4 关于格式化输入和输出函数的进一步讨论 3.4.1 printf()和scanf()函数的返回值问题 若成功,printf()函数返回输出的字符个数,出错时返回负数。/*本程序测试printf()函数的返回值*/#include main()int count;/*定义count,用来接收返回值*/;count=printf(r1=%fnr2=%fn,r1,r2);printf(count=%dn,count);/*输出printf()函数的返回值*/程序输出:count=34 第12页/共22页13 scanf()函数也具有返回值,所不同的是,scanf()函数执行成功时的返回值是成功读取的变量数;如果第一个输入项读入就出错,则返回0。/*本程序测试scanf()函数的返回值*/#include int main()int count,a,b,c;count=scanf(“%d,%d,%d”,&a,&b,&c);printf(a=%d,b=%d,c=%dtcount=%dn,a,b,c,count);执行上述程序,如果输入为:123,1234,12345 则输出结果为:a=123,b=1234,c=12345 count=3第13页/共22页143.4.2 printf()函数的p格式符的应用 在printf()函数中,p格式符用来输出指针的值,即指针所指对象的首地址。利用p格式符的这一特性,我们可以了解变量的空间分配情况。下面来看一个例子。/*本程序测试变量的空间分配情况*/#include int main()int i,j,k;printf(&i=%p,&j=%p,&k=%pn,&i,&j,&k);执行后的输出为(不同的系统环境可能输出值不同,下面是的一种输出):&i=650B:0FD6,&j=650B:0FD8,&k=650B:0FDA第14页/共22页15 3.4.3 scanf()函数的“%”格式应用问题/*用“%”格式接收指定范围的字符*/#include int main()int*ptr;/*定义一个指针*/scanf(“%abcd”,ptr);printf(“ptr=%sn”,ptr);设输入为:dabcaaagade 程序输出为:ptr=dabcaaa第15页/共22页16/*用“%”格式接收指定范围的字符*/#include int main()int*ptr;/*定义一个指针*/scanf(“%bcd,”,ptr);printf(“%sn”,ptr);设输入为:How are you,John!程序输出为:How are you 注:这是由于逗号作为不可接受字符,而作为字符串的定界符.第16页/共22页17/*本程序可接收任意字符串的输入*/#include int main()int*ptr;/*定义一个指针*/scanf(“%n”,ptr);printf(“ptr=%sn”,ptr);设输入为:How are you!程序输出为:How are you!第17页/共22页18 3.4.4 scanf()函数应用中两个最常见的问题 1.空白符问题 /*本程序测试格式转换说明%dn的应用情况*/#include int main(void)int a;printf(Please input the data:);scanf(“%dn”,&a);/*注意这里加了一个换行符n*/printf(“%dn,a);问题:被要求输入两个数才能正常结束 原因:程序要求输入空白符,而空白符是数据的定界符第18页/共22页192标准输入流中残留字符问题/*本程序测试标准输入流中残留字符的情况*/#include int main(void)int a;char c;scanf(%d,&a);/*接收一个整数*/scanf(%c,&c);/*接收一个字符*/printf(a=%d,c=%dn,a,c);注:在这里输入一个整数并按回车键后,程序就输出了结果!第19页/共22页201234na1234A注:在这里输入一个整数1234并按回车键后,就相当于1234n,这个n就输入给字符变量c!第20页/共22页21本章全部练习都要做.做在练习本上.第21页/共22页C语言程序设计-第3章22感谢您的观看!第22页/共22页