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

下载本文档

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

文档简介

1、数据的输入和输出 一个通用的程序往往需要包含对数据的输入和输出的处理过程,数据的输入和输出部分是程序和用户之间的界面部分。语言本身没有提供输入和输出语句,而是由语言编译系统在标准函数库中定义了一些有用的输入和输出函数,程序中的输入和输出是通过调用库函数来实现的。 由于语言编译系统中的由于语言编译系统中的“stdio.h”stdio.h”头文件中包含了与标准输入和输出有关的变量头文件中包含了与标准输入和输出有关的变量定义及相应的宏定义,所以,在利用标准库函定义及相应的宏定义,所以,在利用标准库函数进行输入和输出时,一般需要用编译预处理数进行输入和输出时,一般需要用编译预处理命令命令#includ

2、e#include将文件将文件“stdio.h”stdio.h”包含到用户源包含到用户源文件中文件中 用法如下所示:用法如下所示: #include stdio.h 本章将介绍几个最基本的输入和输出函数,本章将介绍几个最基本的输入和输出函数,它们都是以终端键盘和终端屏幕(或系统隐含指它们都是以终端键盘和终端屏幕(或系统隐含指定的输入和输出设备)为处理对象的。定的输入和输出设备)为处理对象的。3.1数据的输入数据的输入一般是以终端键盘为处理对象的。3.1.1 字符输入函数getchar getchar函数的作用是接收从键盘输入的一个字符。当程序执行到getchar函数时,将等待用户从键盘输入一个

3、字符,然后程序再继续执行。其一般调用形式如下所示: char c; c=getchar( );c是字符型或整型是字符型或整型变变量,量,它将接收从它将接收从键盘输键盘输入入的一个字符。需要注意的一个字符。需要注意的是,在利用的是,在利用getchar函函数来数来输输入字符入字符时时,在从,在从键盘键盘上打入一个字符上打入一个字符后,后,还还需要按一次需要按一次“ “回回车车” ”键键,才能,才能够继续执够继续执行。行。【例例3.13.1】从键盘输入一个字符,并把其存入字符型变从键盘输入一个字符,并把其存入字符型变量量x x中。中。 #include stdio.h“void main( ) c

4、har x; x=getchar( );3.1.2 格式输入函数scanf getchar getchar函数只能输入一个字符,要想输入其函数只能输入一个字符,要想输入其它类型的数据就需要使用它类型的数据就需要使用scanfscanf函数了。函数了。 scanfscanf函数是具有格式控制的输入函数,它可以函数是具有格式控制的输入函数,它可以用来输入语言中的任何类型的数据,而且可以同时用来输入语言中的任何类型的数据,而且可以同时输入多个同类型的或不同类型的数据。其一般调用形输入多个同类型的或不同类型的数据。其一般调用形式如下所示:式如下所示:scanf(格式控制,地址表格式控制,地址表); ;

5、 1. 格式控制 “ “格式控制格式控制”部分是由双引号括起来的字符部分是由双引号括起来的字符串,它主要是由格式说明符组成的,而格式说明符串,它主要是由格式说明符组成的,而格式说明符是由是由“%”%”和格式字符组成的。如,和格式字符组成的。如,%c,%d%c,%d等,它的等,它的作用是将输入的数据转换为指定的格式后存入到由作用是将输入的数据转换为指定的格式后存入到由地址表所指向的相应的变量中。地址表所指向的相应的变量中。 scanf函数中使用的格式字符主要包括如下几个: d,id,i:用来输入十进制整数。输入长整型数据时,使用:用来输入十进制整数。输入长整型数据时,使用 ld ld; 输入短整

6、型数据时,使用输入短整型数据时,使用hdhd。o o: 用来输入八进制整数。输入长整型数据时,使用用来输入八进制整数。输入长整型数据时,使用 lo lo; 输入短整型数据时,使用输入短整型数据时,使用hoho。x,Xx,X:用来输入十六进制整数。输入长整型数据时,使用:用来输入十六进制整数。输入长整型数据时,使用lxlx; 输入短整型数据时,使用输入短整型数据时,使用hxhx。c c: 用来输入单个字符。用来输入单个字符。f f: 用来输入浮点数。可以用小数形式或指数形式输入用来输入浮点数。可以用小数形式或指数形式输入e,E,g,Ge,E,g,G:用来输入浮点数,对于输入来讲,其作用与:用来输

7、入浮点数,对于输入来讲,其作用与f f相同。相同。s s: 用来输入以用来输入以00为结束标志的字符串。以非空白字符开始为结束标志的字符串。以非空白字符开始, , 以第一个空白字符结束。以第一个空白字符结束。( (如输入:如输入:AB CDAB CD,则只读入,则只读入ABAB)u: u: 用来输入无符号十进制数。无符号长整型用用来输入无符号十进制数。无符号长整型用lulu2. 地址表 scanf scanf函数中的函数中的“地址表地址表”是由变量的地址是由变量的地址组成的,如果组成的,如果“地址表地址表”中有多个变量,则每个变中有多个变量,则每个变量之间应由逗号隔开。在语言中,变量的地址可量

8、之间应由逗号隔开。在语言中,变量的地址可由取地址运算符由取地址运算符“&”&”得到,例如,变量得到,例如,变量a a的地址可的地址可写为写为&a&a。 【例例3.23.2】利用利用scanfscanf函数,从键盘输入一个整型数函数,从键盘输入一个整型数(十进制)、一个浮点型数和一个字符,并分别存入(十进制)、一个浮点型数和一个字符,并分别存入变量变量i i、f f和和c c中。中。 #include stdio.hvoid main( ) int i; float f; char c; scanf(%d%f%c,&i,&f,&c);程序执

9、行到程序执行到scanf函函数时,需要用户从数时,需要用户从键盘输入一个整型键盘输入一个整型数据、一个浮点型数据、一个浮点型数据和一个字符后,数据和一个字符后,才能够继续执行。才能够继续执行。输入格式如下:输入格式如下: 12 23.5f(5和和f之间没有空格之间没有空格) 使用scanf函数时,需要注意如下几个问题: (1) (1) 在在scanfscanf函数函数“格式控制格式控制”部分中的每个部分中的每个格式说明符,都必须在格式说明符,都必须在“地址表地址表”中有一个变量与之中有一个变量与之对应。对应。上述程序中上述程序中“%d”%d”与与&i&i对应,对应,“%f”%f

10、”与与&f&f对应,对应,“%c”%c”与与&c&c对应。而且,格式说明符必须要与相应对应。而且,格式说明符必须要与相应变量的类型一致。变量的类型一致。 例如:例如: (2) (2) 当格式说明符之间没有任何字符时,在输当格式说明符之间没有任何字符时,在输入数据时,两个数据之间使用入数据时,两个数据之间使用“空格空格”、tabtab或或“回车回车”键作间隔;如果格式说明符之间包含其它字符,则输键作间隔;如果格式说明符之间包含其它字符,则输入数据时,应输入与这些字符相同的字符作间隔。入数据时,应输入与这些字符相同的字符作间隔。 scanf(%d,%f,&i

11、,&f);例如:例如:在输入数据时,应采用如下形式:在输入数据时,应采用如下形式: 10,2.5其中其中表示表示“回车回车”键。键。在输入字符型数据时,由于在输入字符型数据时,由于“空格空格”也作为有效也作为有效字符输入,因此,不需要用字符输入,因此,不需要用“空格空格”作间隔,只要输作间隔,只要输入一个字符即可。例如入一个字符即可。例如: : scanf(“%c%c%c”,&c1,&c2,&c3); scanf(“%c%c%c”,&c1,&c2,&c3);若输入若输入: a b c: a b c 则则: a=c1,: a=c1,空格字符

12、空格字符=c2,b=c3=c2,b=c3若输入若输入:abc:abc 则则: a=c1,b=c2,c=c3: a=c1,b=c2,c=c3如果采用如下如果采用如下语语句句: scanf(a=%d,b=%d,c=%d,&a,&b,&c);则输则输入入应为应为以下形式以下形式: a=1,b=2,c=3 (3) (3) 可以在格式说明符的前面指定输入数据所占可以在格式说明符的前面指定输入数据所占的列数,系统将自动按此列数来截取所需的数据。的列数,系统将自动按此列数来截取所需的数据。 scanf(%2d%3d,&x,&y);例如:例如:当用户输入当用户输入987

13、65时,系统将时,系统将自动地把自动地把98赋给变量赋给变量x,将,将765赋给变量赋给变量y。这种方式也可用。这种方式也可用于字符型数据的输入。于字符型数据的输入。 char s100, s1200;scanf(%2s%3s,s,s1)当用户输入当用户输入ABCDEFG时,系统将自动地把时,系统将自动地把AB赋给变量赋给变量s,将,将CDE赋给变量赋给变量s1。 scanf(%2c%3c%c,&c,&c1,&c2);当用户输入当用户输入ABCDEFG时,系统将把时,系统将把A赋给变量赋给变量c,将,将C赋给赋给变量变量c1,将,将F赋给变量赋给变量c2 。 (6) (

14、6) 应该特别注意的是,应该特别注意的是,scanfscanf函数中的函数中的“地地址表址表”部分应当是变量的地址,而不是变量名,如果部分应当是变量的地址,而不是变量名,如果只写出变量名,一般在编译阶段是检查不出错误的,只写出变量名,一般在编译阶段是检查不出错误的,但当程序执行时,就会出现混乱。但当程序执行时,就会出现混乱。 (4)在在输输入数据入数据时时,不能,不能规规定精度。例如定精度。例如: scanf(%7.2f,&a); /是是错误错误的的 ( (5) )对对unsigned型型变变量所需的数据,可以用量所需的数据,可以用%u、 、%d、 、%o、 、%x格式格式输输入入(7

15、)(7)如果在如果在% %后有一个后有一个* *附加说明符附加说明符, ,表示跳过它指定的表示跳过它指定的列数列数, ,即不赋给相应的变量。例如:即不赋给相应的变量。例如: scanf(“2d % scanf(“2d %* *3d %2d”,&a,&b);3d %2d”,&a,&b); 如果输入以下信息:如果输入以下信息: 12u345u67(12u345u67(回车回车) ),其中,其中u u表示空格符表示空格符 系统会将系统会将1212赋给整型变量赋给整型变量a,a,而而% %* *3d3d表示读入表示读入3 3位整位整数但不赋给任何变量。然后,再读入数但不

16、赋给任何变量。然后,再读入2 2位整数位整数6767赋给正型赋给正型变量变量b b。3.2 数据的输出 数据的输出一般是以终端显示器(屏幕)数据的输出一般是以终端显示器(屏幕)为处理对象的。为处理对象的。3.2.1 字符输出函数putcharputchar函数的作用是向屏幕(显示器)输出一个字符。其一般调用形式如下所示:char c=A; putchar(c);其作用是将变量其作用是将变量c中的字中的字符输出到屏幕上当前光符输出到屏幕上当前光标的位置上,其中标的位置上,其中c既可既可以是字符型变量,也可以是字符型变量,也可以是整型变量。以是整型变量。【例例3.33.3】从键盘输入一字符,并显示

17、到屏幕上。从键盘输入一字符,并显示到屏幕上。 #include stdio.hvoid main( ) char c; c=getchar( ); putchar(c); putchar函数也可函数也可以以输输出一些特殊字出一些特殊字符(控制字符)。符(控制字符)。 例如:putchar(n)putchar(n)putchar(007);它的作用是输出一它的作用是输出一个个“换行换行”字符。字符。 又如:又如:它的作用是输出一它的作用是输出一个个“响铃响铃”字符。字符。 3.2.2 格式输出函数printf putchar putchar函数只能输出一个字符,而不能输出函数只能输出一个字符,而

18、不能输出整型或浮点型数据。整型或浮点型数据。printfprintf函数是具有格式控制的输函数是具有格式控制的输出函数,它可以用来输出语言中任何类型的数据,出函数,它可以用来输出语言中任何类型的数据,而且可以同时输出多个同类型的或不同类型的数据。而且可以同时输出多个同类型的或不同类型的数据。其一般调用形式如下所示:其一般调用形式如下所示: printf(格式控制,(格式控制,输输出表);出表);1. 格式控制 “ “格式控制格式控制”部分与部分与scanfscanf函数相似,也是由函数相似,也是由双引号括起来的字符串,其中主要包括格式说明符和双引号括起来的字符串,其中主要包括格式说明符和需要原

19、样输出的字符。格式说明符是由需要原样输出的字符。格式说明符是由“%”%”和格式字和格式字符组成的,如,符组成的,如,%c%c和和%f%f等,它的作用是将要输出的数等,它的作用是将要输出的数据转换为指定的格式后输出。据转换为指定的格式后输出。printf函数中使用的格式字符主要包括如下几个: d,id,i:以十进制形式输出带符号的整数,输出长整型数据时,使用:以十进制形式输出带符号的整数,输出长整型数据时,使用ldld。o o: 以八进制无符号形式输出整数,输出长整型数据时,使用以八进制无符号形式输出整数,输出长整型数据时,使用lolo。x,Xx,X:以十六进制无符号形式输出整数,输出长整型数据

20、时,使用:以十六进制无符号形式输出整数,输出长整型数据时,使用lxlx。u u: 以十进制无符号形式输出整数,输出长整型数据时,使用以十进制无符号形式输出整数,输出长整型数据时,使用lulu。c c: 以字符形式输出一个字符。以字符形式输出一个字符。f f: 以十进制形式输出单、双精度浮点数。以十进制形式输出单、双精度浮点数。e,E: e,E: 以指数(科学记数法)形式输出单、双精度浮点数。用以指数(科学记数法)形式输出单、双精度浮点数。用“e”e”时指数以时指数以e e表示(如表示(如1.8e+41.8e+4),用),用“E”E”时指数以时指数以E E表示。表示。g,G: g,G: 选用选用

21、%f%f或或e e格式中输出宽度较短的一种格式,不输出无用的格式中输出宽度较短的一种格式,不输出无用的0 0。s s: 输出以输出以00结尾的字符串。结尾的字符串。o o和和x x格式输出的数值不带符号,符号位也作为八格式输出的数值不带符号,符号位也作为八/ /十六进制数一起显示十六进制数一起显示出来(补码形式)。如:出来(补码形式)。如:a=-1;printf(a=-1;printf(%o%o,a);,a);在整数占在整数占1616位的计算位的计算机上,将显示:机上,将显示:177777177777。这是由于。这是由于-1-1补码是:补码是:1111111111111111111111111

22、11111112. 输出表 printf printf函数中的函数中的“输出表输出表”是由变量名是由变量名组成的(与组成的(与scanfscanf函数不同),这些变量应当与函数不同),这些变量应当与 格式控制格式控制 字符串中的格式说明符的类型一一对应,字符串中的格式说明符的类型一一对应,如果如果“输出表输出表”中有多个变量,则每个变量之间中有多个变量,则每个变量之间应由逗号隔开。应由逗号隔开。【例例3.43.4】从键盘输入一整型数和一浮点数,并显示到从键盘输入一整型数和一浮点数,并显示到屏幕上。屏幕上。 #include stdio.hvoid main( ) int i; float f;

23、 scanf(%d%f,&i,&f); printf(i=%d,f=%f,i,f); 程序执行时按下列程序执行时按下列格式输入数据:格式输入数据:10 2.5那么,程序的输出那么,程序的输出结果将如下所示:结果将如下所示: i=10,f=2.5使用printf函数时,应注意如下几个问题: (1) printf (1) printf函数中的函数中的“格式控制格式控制”字符串字符串中的每一个格式说明符,都必须与中的每一个格式说明符,都必须与“输出表输出表”中的中的某一个变量相对应,例如,上述程序中的某一个变量相对应,例如,上述程序中的“%d”%d”与与i i对应,对应,“%f”%f

24、”与与f f对应,而且格式说明符应当与其对应,而且格式说明符应当与其所对应的变量的类型一致。所对应的变量的类型一致。 (2) (2) 若要利用若要利用printfprintf函数来显示函数来显示“%”%”字符,字符,则应在则应在“格式控制格式控制”字符串中连写两个字符串中连写两个“%”%”。 printf(X=%d%,100/4);例如:例如:将显示:将显示:X=25%(3) 对格式说明符c、d、s和f等可以指定输出字段的宽度。 %md%md:m m为指定的输出字段的宽度。如果数据的位数为指定的输出字段的宽度。如果数据的位数大于大于m m,则按实际的位数输出,否则,输出时向右对齐,则按实际的位

25、数输出,否则,输出时向右对齐,左端补以左端补以“空格空格”符。符。 %-md: %-md: 同上,向左对齐,右端补以同上,向左对齐,右端补以“空格空格”符。符。 %mc:m为指定的输出字段的宽度。若为指定的输出字段的宽度。若m大于一大于一个字符的宽度,则输出时向右对齐,左端补以个字符的宽度,则输出时向右对齐,左端补以“空格空格”符。符。 %-mc:同上,向左对齐,右端补以:同上,向左对齐,右端补以“空格空格”符。符。 %ms%ms:m m为输出时字符串所占的列数。如果字符串的为输出时字符串所占的列数。如果字符串的长度(字符个数)大于长度(字符个数)大于m m,则按字符串的本身长度输出,则按字符

26、串的本身长度输出,否则,输出时,字符串向右对齐,左端补以否则,输出时,字符串向右对齐,左端补以“空格空格”符。符。 %-ms:m的意义同上。如果字符串的长度小于的意义同上。如果字符串的长度小于m,则输出时字符串向左对齐,右端补以则输出时字符串向左对齐,右端补以“空格空格”符。符。 %m.nf%m.nf:m m为浮点型数据所占的总列数(包括小数为浮点型数据所占的总列数(包括小数点),点),n n为小数点后面的位数。如果数据的长度小于为小数点后面的位数。如果数据的长度小于m m,则输出时向右对齐,左端补以则输出时向右对齐,左端补以“空格空格”符。符。 %-m.nf:m、n的意义同上。如果数据的长度

27、小于的意义同上。如果数据的长度小于m,则输出时向左对齐,右端补以,则输出时向左对齐,右端补以“空格空格”符。符。 float b=12345.6789; printf(U=%11.2f,b);结结果:果:U=uuu12345.68 float b=12345.6789; printf(U=%3.3f,b);结结果:果:U=12345.679注:整数部分显示位数不受格式限制注:整数部分显示位数不受格式限制(4) 除了格式说明符及其输出字段的宽度外,在“格式控制”字符串中的其它字符,将按原样输出。一般来讲,除非特殊需要,否则,在显示数据时,可以不指定输出字段的宽度,而直接利用系统隐含的输出宽度。(

28、 (5)在格式符)在格式符o和和x前如果有一个前如果有一个 #附加附加说说明符,明符,则则在在显显示的八示的八进进制或十六制或十六进进制数的前面将分制数的前面将分别别加上加上0或或0 x(没有(没有#时时不加)。例如:不加)。例如:int x=10;printf(“%#o,%#x”,x,x);显显示示结结果:果: 012, ,0 xa(若格式符的若格式符的X为为大写的,大写的,则显则显示示0XA)(5)不同类型的整型数据之间的赋值都是采用“按存储单元中的存储形式直接传送”的方式来进行的。例如:unsigned a;int b=-1;a=b;printf(“a=%d,a=%un”,a,a);printf(“b=%d,b=%un”,b,b);在整数在整数为为16位的位的计计算机上,其算机上,其显显示示结结果果为为:

温馨提示

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

评论

0/150

提交评论