版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、3.2 数据的输入、输出 数据的输入、输出是算法的主要特征、是程序的重要成分。数据的输入、输出是算法的主要特征、是程序的重要成分。在高级语言中,一般都提供相应的输入输出语句。但在在高级语言中,一般都提供相应的输入输出语句。但在C语语言中,为了使编译系统尽量简洁,没有配备输入输出语句。言中,为了使编译系统尽量简洁,没有配备输入输出语句。C语言程序中的输入和输出功能(如:语言程序中的输入和输出功能(如:printf()函数和函数和scanf()函数),是通过调用系统提供的标准库函数实现的。他们不函数),是通过调用系统提供的标准库函数实现的。他们不是是C语言提供的语言提供的“输入输出语句输入输出语句
2、”。因此,不同的计算机系。因此,不同的计算机系统所提供函数的数量、名字和功能会有差异,读者在使用不统所提供函数的数量、名字和功能会有差异,读者在使用不同的系统时要注意这些差异。不过,有些通用的函数(如同的系统时要注意这些差异。不过,有些通用的函数(如printf()和和scanf()等),各种计算机系统都是相同的。等),各种计算机系统都是相同的。本节主要介绍本节主要介绍Turbo C2.0中常用的标准输入输出函数,通过本中常用的标准输入输出函数,通过本节的学习可以使读者掌握节的学习可以使读者掌握Turbo C2.0的键盘输入、屏幕输出的键盘输入、屏幕输出和格式化输入输出的方法。其余的标准输入输
3、出函数可参阅和格式化输入输出的方法。其余的标准输入输出函数可参阅附录附录。3.2.1 标准字符输入输出函数 C语言函数库提供了putchar()、getchar()、getch()、getche()等以键盘、显示器等终端设备为标准输入输出设备的一批“标准输入输出函数”。在使用这些函数前,需用编译预处理命令“#include”将头文件“stdio.h”包括到用户源文件中。即:#include #include 或或 #include “stdio.h”#include “stdio.h” 其中,stdio是standard input&output的缩写,文件后缀“h”是head的缩写。在头文件
4、stdio.h中包含了与标准IO库有关的变量定义和宏定义(有关编译预处理命令详见附录)。 1 1、标准字符输出函数、标准字符输出函数putchar() putchar()函数是向标准输出设备(通常为显示器)输出一个字符, 其调用格式为: putchar(c);putchar(c); 其中:c为一个字符变量、整型变量或整型常量,其值为字符的ASCII 码。 【例【例3.23.2】从标准输出设备输出字母】从标准输出设备输出字母A A的不同方法。的不同方法。 #include main()char c: c=A; putchar(c); putchar(65); putchar(x41); putc
5、har(0 x41); printf(%c, c)printf(%c, c) ; 运行结果为:运行结果为: putchar()函数的作用函数的作用等同于等同于printf(%c, c) 从本例中的连续五个字符输出函数语句可以分清字符变量的不同赋值方法。 也可以输出控制字符,如putchar(n)输出个换行符,使输出的当前位置移到下行的开头。如果将例3.1程序第7行改为putchar(n);则会输出一个回车换行动作,其输出结果为: A A AAA AAA 2 2、标准字符输入函数、标准字符输入函数getchar()及及getch()、getche() getchar()函数是从键盘上读入一个字符
6、, 并立即在显示器上显示出该字符(称作回显)。getchar()函数的调用格式为: getchar()说明:getchar()函数的括号中没有参数。该函数等待输入直到按回车才结束,回车前的所有输入字符都会逐个显示在屏幕上,但只有第一个字符作为函数的返回值。#include main() char c; c=getchar(); putchar(c); 从键盘读入字符直到回车结束从键盘读入字符直到回车结束 在程序执行过程中,若键入字符:在程序执行过程中,若键入字符:ABCDE并回车,并回车,则会在显示:则会在显示:ABCDE。但字符变量。但字符变量C C中只接收首字符中只接收首字符A。 与get
7、char()功能类似的还有getch()和getche()函数。这两个函数都是从键盘上读入一个字符。其调用格式分别为:getch();和和 getche(); 两者的区别是: getch()函数不将读入的字符回显在显示屏幕上, 而getche()函数却将读入的字符回显到显示屏幕上。这两个函数与getchar()的差别是只能接受一次键入,且不需要回车。【例【例3.43.4】从标准输入设备上输入一个字符。】从标准输入设备上输入一个字符。 #include main()char c1,;c1=getch(); putchar(c1); putchar(getche(); 从键盘上读入从键盘上读入一个
8、字符不回一个字符不回显送给字符变量显送给字符变量c 1c 1输出该字符输出该字符 利用回显和不回显的特点利用回显和不回显的特点, , 这两个函数经常用于交互输入的过程这两个函数经常用于交互输入的过程中完成暂停等功能。中完成暂停等功能。三个标准字符输入函数的返回值可以赋给一个字符变量或整型变三个标准字符输入函数的返回值可以赋给一个字符变量或整型变量保存,也可以不赋给任何变量,而直接用在表达式中。例如:量保存,也可以不赋给任何变量,而直接用在表达式中。例如:putchar(getche()putchar(getche() 3.2.2 格式化输入输出函数scanf()和printf() 上一节介绍的
9、标准输入/输出函数,一次只能输入/输出一个字符。C 标准函数库提供的格式化输入函数scanf()和输出函数printf(),可以按指定的格式输入/输出若干个任意类型的数据。由于这两个函数使用十分频繁,故允许省略 “stdio.h”头文件,在所有库函数中也只有这两个库函数在使用时可不包含头文件。 下面详细介绍这两个函数的用法下面详细介绍这两个函数的用法: :1、格式输出函数printf() 格式输出函数printf(),用于将一些表达式(包括常量、变量、函数等)的值按规定格式送到标准输出设备(显示器)上。printf()函数有两类参数:控制字符串和由各种表达式组成的输出参数表。其函数调用的一般形
10、式为: printf(printf(, , );); 其中,控制字符串是用双引号括起来的字符串。其中包含普通字符(包括转义字符)和格式说明两种成份。输出参数表是需要输出的一个或多个表达式。若有多个表达式时,各表达式之间用逗号“,”分隔。参数表中的表达式个数必须与控制字符串中格式说明的个数相等,顺序要1-1对应。 普通字符 在控制字符串中,包含有非格式控制信息,我们统称这些信息为普通字符。普通字符可分为一般普通字符和转义字符。在输出时,前者按实际字符原样输出;后者按各转义字符的实际作用输出(详见2.1.3 节)。例如:例如: printf(This is C programn); 其中,“Thi
11、s is C program”是一般普通字符,直接输出这些信息;“n”为转义字符,输出换行动作。 其中,“This is C program”是一般普通字符,直接输出这些信息;“n”为转义字符,输出换行动作。 其中,双引号中的%d是格式说明,由他控制输出参数表中的变量c按整型数据输出。“Max=”是普通字符,输出时按原样输出“Max=”,起到对后继数据的修饰和说明的作用。 设设C C为为2525,则输出为,则输出为: : Max=25 Max=25printf(Max=%dn ,c); 格式说明 输出参数表 例如:例如:printf(a=%d,b=%d,a,b); printf(a=%d,b=
12、%d,a,b); 格式说明格式说明 输出参数表输出参数表其中,双引号中的字符除了两个“%d”以外,其余(包括逗号“,”)都是普通字符。输出参数表中有两个输出变量a和b,因此,要用两个格式说明。如果如果a a、b b的值分别为的值分别为1010、2020,则输出为,则输出为: :a=10,b=20a=10,b=20数据间的分界非常清析明了。如果语句写成printf(%d%d,a,b); 则输出为则输出为: :10201020则数据间无法分界。 格式说明 格式说明(又称转换说明)是由“%”作起始符、格式字符作终结符的字符序列。其作用是将输出的数据转换为指定的输出格式。格式说明的一般形式为:% 其中
13、,格式字符用于说明输出数据的类型和格式。printf()中可使用的格式字符及其功能详见表 3.1。 附加格式说明符位于“%”和格式字符之间,用于说明输出数据的精度、宽度、小数位数、数据对齐形式、数据前是否要置前导零、前导空格或“+”、“-”号等。表 3.2给出了各种附加格式说明符及其作用。如%d、%8.3f、%-10.6s等,都是合法的格式说明。 而%a、%m.nd、%10-4d等,都是不合法的格式说明。 表表 3.1 printf()的格式字符及功能说明的格式字符及功能说明 格式字符格式字符功功 能能 说说 明明d d、i i输出带符号的十进制整数输出带符号的十进制整数( (正数不输出符号正
14、数不输出符号) )o o输出无符号的八进制整数输出无符号的八进制整数( (不输出前导不输出前导0)0)x x、X X输出无符号的十六进制整数输出无符号的十六进制整数( (不输出前导符不输出前导符0 x)0 x)。用。用x x时,以小写形式时,以小写形式输出十六进制数输出十六进制数a af f;用;用X X时,则输出时,则输出A AF Fu u输出无符号十进制整数输出无符号十进制整数c c输出一个字符输出一个字符s s输出字符串输出字符串f f以小数形式输出单、双精度实数,隐含输出以小数形式输出单、双精度实数,隐含输出6 6位小数位小数p p输出指针输出指针( (地址地址) )的值的值e e、E
15、 E以指数形式输出实数,最多小数位为以指数形式输出实数,最多小数位为5 5位。如位。如1.2e+021.2e+02或或1.2E+02(1.2E+02(用用E E格式格式) )g g、G G自动选用自动选用f f或或e e格式中输出宽度较短的格式中输出宽度较短的种格式种格式( (不输出前导不输出前导0)0)用用G G时,则指数以大写字母时,则指数以大写字母“E”E”表示表示表表3.2 printf()的附加格式说明符的附加格式说明符 字字 符符作作 用用 说说 明明字母字母l l输出输出longlong型整数,可加在格式符型整数,可加在格式符d d、o o、x x、u u前面前面m mm m为一
16、正整数,该正整数表示输出数据的最小宽度,简称为域宽为一正整数,该正整数表示输出数据的最小宽度,简称为域宽. .将域宽将域宽m m和正整数和正整数n n分开分开n nn n为一正整数为一正整数, ,对实数,表示输出对实数,表示输出n n位小数,对字符串,表示截取位小数,对字符串,表示截取的字符个数的字符个数0 0表示左边补表示左边补0 0+ +输出数据右对齐,并在正数前输出输出数据右对齐,并在正数前输出“+”+”号号输出的数字或字符在域内向左对齐输出的数字或字符在域内向左对齐 使用格式说明和printf()函数的注意事项 格式字符区分大小写字母,除大写字母X、E、G具特殊含义外(见表3.1),其
17、余均要用小写字母,如%d不能写成%D。 由表3.1可知,不同的格式字符具有不同的输出类型。因此,在选用格式字符时,要注意与对应的输出参数表的数据类型相一致,若不一致,会出现意想不到的后果,甚至会产生连接错误。 例如:设a=32769,执行语句printf(a=%d,a);则:a=-32767其原因是“%d”只能输出int类型的整数,其数据范围为32767-32768。而若将“%d”改为无符号整数格式“%u”, 执行语句printf(a=%u,a);则会获得正确的结果:a=32769a=32769我们不能期望通过格式字符来实现数据类型的强制转换,例如在int和float类型之间实现类型转换。例如
18、:printf(“%d”,65.0);/*实型数据,整型输出*/printf(“%f”,65); /*整型数据,实型输出*/执行上述两个语句,前者结果为0,后者发生连接错误。 当数据类型不发生实质性转变时,或在int和char类型之间,同一个数据可选用不同的格式,使产生不同的输出效果。main()int a=65;printf(“%d,%c,%u,%o,%x”,a,a,a,a,a);其结果为:65,A,65,101,41在在intint和和charchar类型之间转换时,整型数据的取值范围为类型之间转换时,整型数据的取值范围为0 0255255。同样,一个实型数据可以选用同样,一个实型数据可以
19、选用“%f”%f”、“%e”%e”、“%E”%E”、“%g”%g”、“%G”%G”等不同格式,以便使产生不同的输出效果。等不同格式,以便使产生不同的输出效果。 各种附加格式说明符主要插在“%d”、“%c”、“%f”、“%e”和“%s”之间。常用的有以下几种形式:有以下几种形式:格式字符d:有%md、%-md、%0md 、%ld;格式字符c:有%mc、%-mc;格式字符f:有%m.nf、%-m.nf、%lf;格式字符e:有%m.ne、%-m.ne;格式字符s:有%ms、%-ms、%m.ns、%-m.ns; 其中,m和n必须要用具体的整常数表示。加入一个“-”号可说明输出数据向左对齐,而不是指输出
20、数据前面加一个“-”号。也可以加入一个“+”号,他不仅表示输出数据向右对齐,而且与“-”号不同,会在数值型数据前面输出一个“+”号。格式%0md,表示当输出宽度(域宽)大于数值的实际输出位数时,补上前导“0”。格式%m.nf,表示数据宽度取m位,小数占n位。格式%m.ne 与此类同。格式%m.ns,表示字符串输出宽度取m位,实际输出n个字符,并且向右对齐。若字符串的实际长度大于n,则n个字符以后的内容将被删除。当域宽m的取值小于数据的实际输出宽度时,则按实际数据输出。当n的取值小于实际的小数位时,将按四舍五入输出n位小数。格式%ld,表示输出long型整数。格式%lf,表示输出double型浮
21、点数。下面通过一个实例来说明各种格式字符和附加格式说明符的作用。【例【例3.6】printf()函数标准格式输出实例。函数标准格式输出实例。 main()char c; int a=1234, *i;float f=3.14159265,*j;double x=0.12345678987654321;c=x41; i=&a; j=&f; printf(1.%d a=%dn, a); printf(2.%2d a=%2dn, a); printf(3.%6d a=%6dn, a); printf(4.%06d a=%06dn, a); printf(5.%-10d a=%-10dn, a);pr
22、intf(6.%+10d a=%+10dn ,a);printf(7.%f f=%fn, f); printf(8.%6.4f f=%6.4fn, f); printf(9.%10.10f f=%10.10fn, f); printf(10.%-10.10f f=%-10.10fn, f); 输出输出6位十进制数位十进制数输出输出6位实数,其位实数,其中小数点后中小数点后4位位 printf(11.%lf x=%lfn, x); printf(12.%18.16lf x=%18.16lfn, x); printf(13.%e x=%en,x); printf(14.%g x=%gn,x );
23、printf(15.%p i=%pn,i); printf(16.%x j=%xn,j); printf(17.%c c=%cn, c); printf(18.%x c=%xn, c); printf(19.%S s=%sn,abcdefgh); printf(20.%8.3S s=%8.3sn,abcdefgh); 输出输出18位长实数,位长实数,小数点后小数点后16位位用用%e,%g格式输出长实数格式输出长实数用用%m.ns格式输出字符串格式输出字符串 用用16进制进制%x格式输格式输出字符出字符上述程序的运行结果如下:上述程序的运行结果如下: 1.%d a=12342.%2d a=123
24、43.%6d a= 12344.%06d a=0012345.%-10d a=12346.%+10d a= +12347.%f f=3.1415938.%6.4f f=3.14169.%10.10f f=3.141592741010.%-10.10f f=3.141592741011.%lf x=0.12345712.%18.16lf x=0.123456789876543213.%e x=1.23457e-0114.%g x=0.12345715.%p i=FFD216.%x j=ffd417.%c c=A18.%x c=4119.%s s=abcdefgh20.%8.3s s= abc上面
25、结果中的地址值在不同计算机上可能会不同上面结果中的地址值在不同计算机上可能会不同。 e e格式的输出宽度格式的输出宽度e格式有如下的输出形式:-n.nnnnnne|E-n.nnnnnne|E1 1+|-+|-1 1nnnnnn加上符号的总宽度一般可达14位,但在TC2.0上采用e格式,正数为11位,负数为12位。例如运行:例如运行:printf(“%e”,123.45678);printf(“%e”,123.45678);其输出为:其输出为:1.23457e+021.23457e+02其中,数值按规范化指数形式输出(即小数点前必须有且仅有1位非零数字),小数5位。指数部分占4位(“e”占1位,
26、符号占1位,指数占2位)。 若要输出符号若要输出符号“%”%”,应连用两个,应连用两个“%”%”表示。表示。如执行:如执行:printf(a=%f%,1.0/3);printf(a=%f%,1.0/3);则输出的结果为:则输出的结果为:0.333333% 对于不符合语法规则的格式说明,编译器将其后的格式说明对于不符合语法规则的格式说明,编译器将其后的格式说明按普通字符处理。按普通字符处理。例如:例如:main()main()int a=65,m=6;int a=65,m=6;printf(%d,%md,%cn,a,a,a);printf(%d,%md,%cn,a,a,a); 该例的本意是用该例
27、的本意是用%d%d、%6d%6d、%c%c三种格式输出整数三种格式输出整数65,65,而程序的运而程序的运行结果却为:行结果却为:65,%md,%c 其原因在于其原因在于%md是不合法的的格式说明。是不合法的的格式说明。处于处于m位置必须是一个整数位置必须是一个整数,不能设为变量。不能设为变量。 有关实型数据的有效位数有关实型数据的有效位数 受存储单元量的限制(单精度4字节、双精度8字节),实型数据的有效位数总是有限的。对于单精度数据,只有前7位数字是有效数字。双精度数的有效数字为16位。在不使用附加格式说明符“n”的情况下,给出小数6位。因此,输出的结果的总长度可能会超过有效位,但在有效位以
28、后的数字不会是正确的数字。 【例【例3.73.7】测试实数有效位数的实例。】测试实数有效位数的实例。 main()main() float p,q;float p,q;double x,y;double x,y;p=1111.1111p=1111.1111q=2222.2222;q=2222.2222;x=1111111111111.11111111;x=1111111111111.11111111;y=2222222222222.22222222;y=2222222222222.22222222;printf(“%f”,p+q);printf(“%f”,p+q);printf(“%f”,x+
29、y);printf(“%f”,x+y); 对对于上述于上述数数据,正确求和据,正确求和结结果分果分别应该别应该是是3333.33333333.3333和和3333333333333.333333333333333333333.33333333。但程序。但程序运运行行结结果果为为: : 可以看到输出的小数位均有6位,但是最后3位小数(分别超过7位和16位)都是不正确的。在【例3.5】的第9、10两行的输出中也有类似情况,其中最右边的4位数据7410是有效数以外的无效数据。由此可知,在程度设计时,务必要对结果进行必要的分析和检查,不要以为输出的结果总是正确的。 2、格式输入函数scanf() 格式
30、输入函数scanf(),其功能与函数printf()类似,但方向相反,用于按规定的格式从标准输入设备(键盘)上输入数据,并将数据存入对应的地址单元中。该函数调用的一般形式为: scanf( scanf(, , );); 其中,地址参数表是需要接受输入数据的所有变量的地址(指针)或字符串的首地址(指针),而不是变量本身,这与printf()函数完全不同, 读者要特别注意。若有多个地址时,各地址之间要用逗号“,”分隔。 控制字符串包含格式说明和普通字符。其中,格式说明与printf()函数相类似,而普通字符则为: 空格符空格符: : 空格符会使函数空格符会使函数scanf()scanf()在读操作
31、中过滤在读操作中过滤掉输入中的一个或多个空格符。掉输入中的一个或多个空格符。 非空格字符(除非空格字符(除“%”外)外):一个非空格字符会使一个非空格字符会使scanf()函数在读入时过滤掉与此相同的字符。函数在读入时过滤掉与此相同的字符。 【例【例3.8】从键盘上输入数据给两个变量】从键盘上输入数据给两个变量i、j赋值。赋值。可设计如下函数可设计如下函数: main()int i, j;printf(i,j=?/n); scanf(%d, %d, &i,&j); printf(i=%d j=%d,i,j); 则会输出:则会输出: 地址地址 内存单元内存单元(16bit)(16bit) 变量变
32、量& i& i1212i i& j& j3434j j 图图3.6 3.6 变量存储图变量存储图等待接受用户输入,等待接受用户输入,注意在控制字符串中含注意在控制字符串中含有普通字符有普通字符“,”号及号及参数表中使用参数表中使用&i、&j,而不是而不是i、j 本例在运行过程中,本例在运行过程中,首先在显示屏幕上显示提示信息:首先在显示屏幕上显示提示信息:i, j=?并等待接受用户输入,此时,并等待接受用户输入,此时,我们可以在键盘上输入如下一串信息:我们可以在键盘上输入如下一串信息: 12,34 i=12 j=34i=12 j=34位置的位置的“&i, &j”&i, &j”是两个地址表达式,
33、是两个地址表达式,“&”&”是地址运算符。是地址运算符。&i &i 和和 &j&j分别表示变量分别表示变量i i 和和j j此例中,处于地址参数表在内存中的地址。在函数scanf()中给变量i和j赋值,是通过变量的地址&i和&j将值送到变量所对应的内存单元中,而不是赋给变量本身。如图3.6所示。在执行时scanf(%d, %d, &i,&j)函数调用时,计算机依次读入用户的输入信息,先读由3和4组成的整型数,当读到“,”时,认为第一个数据结束,将读入的数据34存入&i单元中;然后把接着读入的逗号过滤掉;再读取后继数据5和6,遇到“回车符”时,读入结束,并将56存入&j单元中。此时,一次函数调用
34、结束。 在整个读入过程中,若找不到“,”号这一特定字符,scanf()函数就立即终止执行,后继变量j将不被赋值。 普通字符普通字符 与函数printf()中的普通字符不同,在程序运行时,函数scanf()中的普通字符是不会被输出的。因此,不能作为输入数据的提示信息使用。如在【例3.8】中,提示信息仍然用函数printf()实现。 函数函数scanf()中的普通字符有以下作用:中的普通字符有以下作用: 用作输入数据间的分隔符。如在【例3.8】的%d, %d中,因为在两个%d之间有一个普通字符逗号“,”,所以在输入数据时,输入逗号作为12、34间的分隔符。这里的逗号可以换成除“%”符以外的其他普通
35、字符,如空格符,则在输入时必须输入一个或多个空格。也可以是转义字符,如改写成:如改写成: %dn%d%dn%d则应作如下输入操作,才能使变量i和j分别获得12和34之值。 12 13 注释格式说明。例如:例如:scanf(i=%d,j=%d, &i,&j);scanf(i=%d,j=%d, &i,&j);这里的“i=”和“j=”起到对后继格式符“%d”注释作用。但此时在对变量i和j赋值,需原样输入这些字符。即应作如下输入操作:i=12,j=34才能给变量i和j正确赋值。反而增加了输入量,因而一般不宜在scanf()中,使用过多的普通字符。 在读取现成的数据流时,如字符串或文件中的信息,而其中有
36、些已知的已知的信息需要“跳过”不读,则可将这些已知信息加入到控制字符串中,起到信息自动过滤的作用。 格式说明格式说明 与函数printf()相类似,函数scanf()中的格式说明也是由“%”作起始符、格式字符作终结符、中间可包含附加格式说明符的字符序列。表3.3和表3.4分别列出了scanf()用到的格式字符和附加格式说明符。如如%ld、%*d、%4d %ld、%8f、%lf、%10s等,等,都是合法的格式说明都是合法的格式说明由表3.4和表3.2对照可知,下列均是不合法的格式说明: %-8d、%-10.3s、%8.4f等。等。 表表 3.3 sacnf()的格式字符及其功能说明的格式字符及其
37、功能说明 格式字符说说 明明d d、i i要求输入带符号的十进制整数,对应参数应为int型指针u u要求输入无符号的十进制整数,对应参数应为int型指针o o要求输入无符号的八进制整数(前导0可有可无),对应参数应为int型指针x x、X X要求输入无符号的十六进制整数(大小写作用相同),其余同o格式c c要求输入单个字符,对应参数应为char型指针s s要求输入字符串,并将串送入一个字符数组,在输入时以非空白字符开始,以第个空白字符结束。会自动加0作串结束标志。对应指向char型数组的指针f f要求输入实数,可用小数或指数形式输入,对应参数应为float型指针e e、E E、g g、G G作
38、用同f,e与f、g可以互相替换(大小写作用相同)表表3.4 sacnf()的附加格式说明符的附加格式说明符 字字 符符说说 明明字母字母l l用于输人用于输人longlong型整数(型整数(%ld%ld、%lo%lo、%lx%lx)或)或doubledouble型实数型实数(%lf%lf或或%le%le)字母字母h h用于输入用于输入shortshort型整数(型整数(%hd%hd、%ho%ho、%hx%hx)m mm m 为一正整数,用于指定输入数据的宽度(域宽)为一正整数,用于指定输入数据的宽度(域宽)* *表示本输入项在读人后不赋给相应的指针表示本输入项在读人后不赋给相应的指针 使用使用
39、scanf()函数及其格式说明的注意事项函数及其格式说明的注意事项 空格、【Tab】、【Enter】三键是输入数值型数据的分隔控制键 在函数scanf()的使用中,若在格式说明间包含“,”、“:”、空格等普通字符时,我们可用这些字符作为输入数据(包括数值型和字符型)间的分隔符,并用回车键结束数据输入。但若不包含任何普通字符时,只能用这三个键作为数值型数据间的分隔符,不能用其他任何符号作两个数据间的分隔符。例如,设有语句:scanf(“%d%d%d”,&a,&b,&c);在运行时,可用以下三种等价的方法之一给变量a、b、c赋值:123 456 789123【Tab】456【Tab】789123
40、456 789 采用“%c”格式输入字符时,空格字符、回车和“转义字符”都是可以赋给字符型变量的有效“字符”。因此,除非本意要将他们赋给变量,否则,不能用这些“字符”作输入字符的分隔符。例如,设有语句:例如,设有语句:scanf(“%c%c%c”,&c1,&c2,&c3);scanf(“%c%c%c”,&c1,&c2,&c3);printf(“c1=%c c2=%c c3=%c”,c1printf(“c1=%c c2=%c c3=%c”,c1,c2c2,c3);c3);当输入为:当输入为:A B CA B C则输出为:则输出为:c1=A c2= c3=Bc1=A c2= c3=B其中,其中,c
41、2接收到的是输入流中的第二个字符接收到的是输入流中的第二个字符“空格空格”。 可以在“%”和格式字符之间正整数,用于表示任何读操作中的最大位数。系统自动按他截取所需数据,而不需用任何其他分隔符。如执行下列两行语句:scanf(“%8f%8fd”,&x,&y);printf(“%f%e”,x,y);当输入为:12.34567-12.34e234则输出为:12.345670,-1.23400e+3系统自动将前8位赋给变量a,后8位赋给变量。多余的最后2位“34”无用。此例还说明了可以用格式字符“f”输入“e”格式的实数。综上所述,在运行时输人数据,分别遇到以下情况时被认为一个数据输入结束。在格式说
42、明后遇到“,”等普通字符; 遇空格、【Tab】或【Enter】键;按指定的宽度m结束; 此外遇到非法输入时,会强行结束输入。 关于附加格式说明符“*”的使用格式说明中使用符号“*”的作用是过滤掉当前输入数据,而将下一个数据读入后继变量。例如:scanf(“%c%*c%c%c”,&ch1,&ch2,&ch3);printf(“ch1=%c,ch2=%c,ch3=%c”,ch1,ch2,ch3);当输入为:ABCDEFGHI则输出为:ch1=A, ch2=C, ch3=D当字符“A”读入变量ch1以后,下一个数据字符“B”成为当前输入数据,他不被读入后继变量ch2,变量ch2获得的是字符“C”。 若将“%c%*c%c%c”中最后去掉一个“%d”,请读者分析并上机观察,会产生什么样的后果。 由于指针变量本身就是地址,因此,在使用scanf()函数时, 不需要在它们前面加上“&”操作符。 main() int *p;scanf(%x,p); printf(%pn, *p); 当输入为:ffe2则输出为:FFE2从健盘输入指针,从健盘输入指针,只能用只能用p、不能用、不能用&p 向屏幕输出指针向屏幕输出指针 输
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 巴彦淖尔市人民医院介入放射科主治医师晋升考核
- 朔州市人民医院老年急性冠脉综合征诊疗特点考核
- 2025年现代服务业投资项目可行性研究报告
- 2025年秋译林版(三起)(2024)小学英语四年级上册(期中)综合词汇句子专项训练题及答案
- 秦皇岛市中医院子宫内翻复位术操作考核
- 2025年环保教育推广环保可持续性研究报告
- 呼伦贝尔市人民医院针灸新技术应用考核
- 2025年中国水处理杀生剂项目商业计划书
- 2025年中国软包装复膜项目投资计划书
- 2025年深井泵项目可行性研究报告
- 无人酒店登记管理办法
- 带电安全工器具保管与使用规定
- 员工心里健康管理办法
- 企业公共安全课件教学
- 新安全生产法2025全文
- 子痫前期预测与预防指南(2025)解读 3
- 降低皮下注射低分子肝素钠出血发生率
- 美食博主培训
- 质检新员工岗位培训内容
- 徐悲鸿美术课件
- 《党的组织生活制度培训》课件
评论
0/150
提交评论