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