c语言 输入和输出_第1页
c语言 输入和输出_第2页
c语言 输入和输出_第3页
c语言 输入和输出_第4页
c语言 输入和输出_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C语言程序设计-第3章1第第3 3章章 标准输入与输出标准输入与输出3.1 3.1 概述概述3.2 3.2 字符输入输出函数字符输入输出函数3.3 3.3 格式化输入和输出函数格式化输入和输出函数 3.4 3.4 输入和输出函数的讨论输入和输出函数的讨论C语言程序设计-第3章2 通过终端输入(如键盘、鼠标等),也称为标准输入通过终端输入(如键盘、鼠标等),也称为标准输入(standard inputstandard input),直接向终端输出(如显示器、打印机等),),直接向终端输出(如显示器、打印机等),也称为标准输出(也称为标准输出(standard outputstandard out

2、put)。)。3.1 3.1 概述概述 C C语言本身没有提供输入输出语句,语言本身没有提供输入输出语句,C C语言中的所有语言中的所有I/OI/O操作都操作都是通过函数调用来实现,而这些并非是通过函数调用来实现,而这些并非C C语言一部分的输入输出函数语言一部分的输入输出函数均以目标级程序的方式提供,并存放在一个均以目标级程序的方式提供,并存放在一个C C标准函数库中。标准函数库中。 每一个标准库都有一个相应的头文件,该头文件包含了该库中每一个标准库都有一个相应的头文件,该头文件包含了该库中所有函数的函数原型及其相关信息。在调用这些库函数时,要用预所有函数的函数原型及其相关信息。在调用这些库

3、函数时,要用预处理命令处理命令“#include”#include”将有关的将有关的“头文件头文件”包括到用户源程序中。包括到用户源程序中。标准输入输出库函数对应的头文件是标准输入输出库函数对应的头文件是“stdio.hstdio.h”。stdiostdio是是standard input & outputstandard input & output的缩写。因此,读者在调用标准输入输的缩写。因此,读者在调用标准输入输出库函数时,你的源程序开头应该有如下编译预处理命令:出库函数时,你的源程序开头应该有如下编译预处理命令: #includestdio.h#include 或或 #

4、includestdio.h#includestdio.h C语言程序设计-第3章33.2 3.2 字符输入输出函数字符输入输出函数3.2.1 3.2.1 字符输出函数字符输出函数putcharputchar()() putchar putchar()()函数是向屏幕一个字符函数是向屏幕一个字符, , 其调用格式为其调用格式为: : putchar(ch putchar(ch) ); 其中其中chch为一个字符变量、字符常量或整型常量。为一个字符变量、字符常量或整型常量。 /* 本程序测试多种类型数据作putchar()函数参数的输出情况 */ #includestdio.h #include

5、 main() main() char c=A char c=A; /* 定义字符变量并初始化 */ putchar(c putchar(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,它以转义字符表示,八进制 */ C语言程序设计-第3章43.

6、2.2 3.2.2 带缓冲区的字符输入函数带缓冲区的字符输入函数getchargetchar()() getchar getchar()()函数的功能是从标准输入文件(通常是键盘,亦指函数的功能是从标准输入文件(通常是键盘,亦指磁盘文件)读取一字节代码(即一个字符),并回显。所谓回显,磁盘文件)读取一字节代码(即一个字符),并回显。所谓回显,是指输入一个字符的同时又在屏幕上显示出该字符。这是标准是指输入一个字符的同时又在屏幕上显示出该字符。这是标准C C提提供的字符输入函数,因此也是最常用的字符输入(尤其是键盘输入)供的字符输入函数,因此也是最常用的字符输入(尤其是键盘输入)函数。函数。 键盘

7、缓冲区(实际上应该称作输入流即键盘缓冲区(实际上应该称作输入流即stdinstdin 流)。所谓键盘流)。所谓键盘缓冲区,是指在内存开辟的一片临时单元,用来暂时存放从键盘输缓冲区,是指在内存开辟的一片临时单元,用来暂时存放从键盘输入的字符。入的字符。getchargetchar()()函数是带键盘缓冲区的输入函数函数是带键盘缓冲区的输入函数,是指当从,是指当从键盘输入字符时,这些字符先存放在键盘缓冲区,如果不敲回车键,键盘输入字符时,这些字符先存放在键盘缓冲区,如果不敲回车键,getchargetchar()()函数并没有真正被执行(即所谓被激活);仅当回车键函数并没有真正被执行(即所谓被激活

8、);仅当回车键也被送入键盘缓冲区后,也被送入键盘缓冲区后,getchargetchar()()函数才从键盘缓冲区中读取一函数才从键盘缓冲区中读取一个字符。个字符。 C语言程序设计-第3章5强调以下三点:强调以下三点: (1) (1) 调用调用getchargetchar()()函数输入字符时,必须用另一个函数输入字符时,必须用另一个变量(字符变量或整型变量)接收输入的字符。例如:变量(字符变量或整型变量)接收输入的字符。例如: ch = getcharch = getchar()(); (2) (2) 调用调用getchargetchar()()函数输入字符时,仅当敲入回车函数输入字符时,仅当

9、敲入回车键后,函数才被激活。键后,函数才被激活。 (3) (3) 调用该函数时,输入的每一个字符,包括空白符调用该函数时,输入的每一个字符,包括空白符(即空格、制表符和回车符),都被送存到键盘缓冲区。(即空格、制表符和回车符),都被送存到键盘缓冲区。C语言程序设计-第3章6 /* 本程序调用getchar()函数输入一个字符 */ #includestdio.h #include main() main() char c char c; /* 定义字符变量 */ c = getchar c = getchar()(); /* 接收键盘输入的一个字符 */ putchar(c putchar(c

10、) ); /* 输出该字符 */ putchar(n putchar(n); C语言程序设计-第3章7 3.2.3 3.2.3 不带缓冲区的字符输入函数不带缓冲区的字符输入函数getchgetch()()和和getchegetche()() 这是某些编译器,譬如这是某些编译器,譬如Turbo CTurbo C新增加的两个字符输新增加的两个字符输入函数,这两个函数都是从键盘上读入一个字符。两者的入函数,这两个函数都是从键盘上读入一个字符。两者的区别是区别是: getch: getch()()函数将读入的字符函数将读入的字符不回显不回显在屏幕上在屏幕上, , 而而getchegetche()()函

11、数却将读入的字符函数却将读入的字符回显回显到显示屏幕上。到显示屏幕上。C语言程序设计-第3章8 /* 本程序调用getchar()函数输入一个字符 */ #includestdio.h #include main() main() char c, ch char c, ch; c=getchc=getch()(); /* 从键盘上读一字符不回显送给变量c */ putchar(c putchar(c) ); /* 输出该字符*/ ch=getche ch=getche()();/* 从键盘读一字符送给变量ch并回显 */ putchar(ch putchar(ch) );/* 输出该字符*/

12、C语言程序设计-第3章93.3 3.3 格式化输入和输出函数格式化输入和输出函数3.3.1 printf3.3.1 printf()()函数函数 用于按指定格式向标准输出设备用于按指定格式向标准输出设备( (屏幕屏幕) )输出。有两种形式:输出。有两种形式: printfprintf(字符串字符串); 例如,下面的语句:例如,下面的语句: printf(Howprintf(How are you are you!n)n);是在屏幕上输出这样一行:是在屏幕上输出这样一行: How are youHow are you!这种形式的输出并没有指定输出格式。这种形式的输出并没有指定输出格式。C语言程序

13、设计-第3章10另一种形式是:另一种形式是:printfprintf(, , ) “格式控制串格式控制串”是由是由0 0个或多个个或多个格式转换说明格式转换说明组成的一个字符组成的一个字符串序列。格式转换说明的一般形式为:串序列。格式转换说明的一般形式为: % %flag width.prechlLflag width.prechlL输出格式符输出格式符格式修饰符(见表格式修饰符(见表3-23-2) 见表见表3-13-1 printf(“%dprintf(“%d”, a)”, a); printf(%d%f, a,xprintf(%d%f, a,x) ); printf(a=%d, b=%d,

14、 a+b=%dn, a,b,a+bprintf(a=%d, b=%d, a+b=%dn, a,b,a+b) ); printf(“a=%-d, x=%+8.2f, x+y=%Lfn, a,x,x+yprintf(“a=%-d, x=%+8.2f, x+y=%Lfn, a,x,x+y) ); 左对齐左对齐 正数也要加正号 输出共占输出共占8 8位位, ,其中小数占两位其中小数占两位输出为long double型C语言程序设计-第3章113.3.2 scanf3.3.2 scanf()()函数函数 scanfscanf()()函数的一般形式为:函数的一般形式为: int scanfint scan

15、f(, ) “格式控制串格式控制串”是由是由0 0个或多个个或多个格式转换说明格式转换说明组成的一个字符组成的一个字符串序列。格式转换说明的一般形式为:串序列。格式转换说明的一般形式为: % % * *widthh/l/Lwidthh/l/L 输入格式符输入格式符 格式修饰符(见表格式修饰符(见表3-43-4) 见表见表3-33-3 格式转换说明的作用是引导对下一输入项进行转换。格式转换说明的作用是引导对下一输入项进行转换。 “ “地址列表地址列表”中给出一个或多个中给出一个或多个输入项输入项, ,输入项之间用逗号分输入项之间用逗号分隔。隔。 从概念上讲,输入项的表示形式是从概念上讲,输入项的

16、表示形式是指针指针,指向存储输入数据的,指向存储输入数据的变量。变量。因此,输入项必须指明变量的地址。因此,输入项必须指明变量的地址。C C语言提供了一个取变语言提供了一个取变量地址的运算符量地址的运算符“& &”,只要将它作用在变量上,就能得到该变量,只要将它作用在变量上,就能得到该变量的地址。例如,的地址。例如,&a,&b&a,&b分别表示变量分别表示变量a a和变量和变量b b 的地址。的地址。C语言程序设计-第3章12 例如,若要为int变量a和b从键盘输入数据,如果写作: scanf(%d%d, a,b);是不正确的。可用如下语句实现:

17、 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。 C语言程序设计-第3章13 3.4 3.4 关于格式化输入和输出函数的进一步讨论关于格式化输入和输出函

18、数的进一步讨论 3.4.1 printf3.4.1 printf()()和和scanfscanf()()函数的返回值问题函数的返回值问题 若成功,若成功,printfprintf()()函数返回输出的字符个数,出错时返回负数。函数返回输出的字符个数,出错时返回负数。 /* 本程序测试printf()函数的返回值 */ #includestdio.h #include main() main() int int count count; /* 定义count,用来接收返回值 */ float r1 = 12345.12345678, r2 = 123.123456789 float r1 = 1

19、2345.12345678, r2 = 123.123456789; count = printf(r1 = %fnr2 = %fn,r1,r2)count = printf(r1 = %fnr2 = %fn,r1,r2); printf(count=%dn,countprintf(count=%dn,count) );/* 输出printf()函数的返回值 */ 程序输出:程序输出: r1 = 12345.123047r1 = 12345.123047 r2 = 123.123459 r2 = 123.123459 count=34 count=34 C语言程序设计-第3章14 scanfs

20、canf()()函数也具有返回值,所不同的是,函数也具有返回值,所不同的是,scanfscanf()()函数执行成函数执行成功时的返回值是成功读取的变量数;如果第一个输入项读入就出错,功时的返回值是成功读取的变量数;如果第一个输入项读入就出错,则返回则返回0 0。 /* 本程序测试scanf()函数的返回值 */ #includestdio.h #include int int main() main() int int count, a count, a,b b,c c; count = scanf(“%d,%d,%dcount = scanf(“%d,%d,%d”, &a, &am

21、p;b, &c)”, &a, &b, &c); printf(a=%d,b=%d,c=%dprintf(a=%d,b=%d,c=%dttcount=%dn,acount=%dn,a, b, c, b, c,count)count); 执行上述程序,如果输入为: 123,1234,12345 则输出结果为: a=123,b=1234,c=12345 count=3C语言程序设计-第3章153.4.2 printf3.4.2 printf()()函数的函数的p p格式符的应用格式符的应用 在在printfprintf()()函数中,函数中,p p格式符用来输出指针的

22、值,即指针所指格式符用来输出指针的值,即指针所指对象的首地址。利用对象的首地址。利用p p格式符的这一特性,我们可以了解变量的空格式符的这一特性,我们可以了解变量的空间分配情况。下面来看一个例子。间分配情况。下面来看一个例子。 /* 本程序测试变量的空间分配情况 */ #includestdio.h #include int int main() main() int int i i,j j,k k; printf(&i=%p,&j=%p,&k=%pn, &i,&j,&kprintf(&i=%p,&j=%p,&k=%pn,

23、 &i,&j,&k) ); 执行后的输出为(不同的系统环境可能输出值不同,下面是Turbo 2.0的一种输出): &i=650B:0FD6,&j=650B:0FD8,&k=650B:0FDA&i=650B:0FD6,&j=650B:0FD8,&k=650B:0FDAC语言程序设计-第3章16 3.4.3 scanf3.4.3 scanf()()函数的函数的“%”%”格式应用问题格式应用问题 /* 用“%”格式接收指定范围的字符 */ #includestdio.h #include int int main() main(

24、) int int * *ptrptr; /* 定义一个指针 */ scanf(“%abcd”, ptr scanf(“%abcd”, ptr) ); printf(“ptr=%sn”,ptrprintf(“ptr=%sn”,ptr) ); 设输入为: dabcaaagadedabcaaagade 程序输出为: ptr=dabcaaaptr=dabcaaaC语言程序设计-第3章17 /* 用“%”格式接收指定范围的字符 */ #includestdio.h #include int int main() main() int int * *ptrptr; /* 定义一个指针 */ scanf(

25、“% scanf(“% bcd,”, ptrbcd,”, ptr) ); printf(“%sn”,ptrprintf(“%sn”,ptr) ); 设输入为: How are you,JohnHow are you,John! 程序输出为: How are youHow are you 注注: :这是由于逗号作为不可接受字符这是由于逗号作为不可接受字符, ,而作为而作为字符串的定界符字符串的定界符. .C语言程序设计-第3章18/ /* * 本程序可接收任意字符串的输入本程序可接收任意字符串的输入 * */ / #includestdio.h#include int int main() ma

26、in() int int * *ptrptr; / /* * 定义一个指针定义一个指针 * */ / scanf(“%n”, ptr scanf(“%n”, ptr) ); printf(“ptr=%sn”,ptrprintf(“ptr=%sn”,ptr) ); 设输入为:设输入为: How are you!How are you! 程序输出为程序输出为: : How are you!How are you!C语言程序设计-第3章19 3.4.4 scanf3.4.4 scanf()()函数应用中两个最常见的问题函数应用中两个最常见的问题 1. 1.空白符问题空白符问题 /* 本程序测试格式转换说明%dn的应用情况 */ #includes

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论