《c语言中scanf的用法.docx》由会员分享,可在线阅读,更多相关《c语言中scanf的用法.docx(24页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、c语言中scanf的用法c语言中scanf的用法c语言中scanf的用法的用法你知道吗?下面我就跟你们具体介绍下c语言中scanf的用法的用法,希望对你们有用。c语言中scanf的用法的用法如下:Printf和Scan函数的使用方法一printf()函数是格式化输出函数,一般用于向标准输出设备按规定格式输出信息。在编写程序时经常会用到此函数。printf()函数的调用格式为:printf(格式化字符串,参量表其中格式化字符串包括两部分内容:一部分是正常字符,这些字符将按原样输出;另一部分是格式化规定字符,以%开场,后跟一个或几个规定字符,用来确定输出内容格式。参量表是需要输出的一系列参数,其个
2、数必须与格式化字符串所讲明的输出参数个数一样多,各参数之间用,分开,且顺序逐一对应,否则将会出现意想不到的错误。格式化字符串的格式是:%标志输出最小宽度.精度长度格式字符1.标志:标志字符为-、+、#、空格四种,其意义下表所示:标志意义-结果左对齐,右边填空格+输出符号(正号或负号)空格输出值为正时冠以空格,为负时冠以负号#对c,s,d,u类无影响;对o类,在输出时加前缀o;对x类,在输出时加前缀0x;对e,g,f类当结果有小数时才给出小数点(?例1:includemain()inta=100;floatb=123.255;printf(a=%d,a);printf(a=d,a);printf
3、(a=%-10d,a);printf(a=%+d,a);printf(a=%d,a);printf(a=%#o,a);printf(a=%#x,a);printf(b=%#f,b);运行结果a=100a=100a=100a=+100a=100a=0144a=0x64b=123.254997(?2.输出最小宽度:用十进制整数来表示输出的最少位数。至少要输出这么多位!若实际位数多于定义的宽度:则按实际位数输出。若实际位数少于定义的宽度:则右对齐,左边留空。有负号,左对齐,右边留空表示宽度的数字以0开场,则右对齐,左边留空。例2includemain()inta=3456;printf(a=,a);
4、/若实际位数多于定义的宽度:则按实际位数输出printf(a=d,a);/若实际位数少于定义的宽度:则右对齐,左边留空printf(a=%-10d,a);/若实际位数少于定义的宽度:有负号,左对齐,右边留空printf(a=0d,a);/若实际位数少于定义的宽度:表示宽度的数字以0开场,则右对齐,左边留空printf(a=%-010d,a);/左对齐,0无意义。运行结果:a=3456a=3456a=3456a=0000003456a=34563.精度:精度格式符以.开始,后跟十进制整数。意义是:假如输出数字,则表示小数的位数;若实际位数大于所定义的精度数,则四舍五入。若缺乏则补0;假如输出的是
5、字符,则表示输出字符的个数;若实际位数大于所定义的精度数,则截去超过的部分。例3:includemain()printf(%.3f,12.3456);printf(%.9f,12.3456);printf(%.3s,abcdefgprintf(%.9s,abcdefg运行结果:12.346/四舍五入到小数点后三位12.345600000/缺乏补0abcabcdefg4.长度:长度格式符为h,l两种,h表示按短整型量输出,l表示按长整型量输出?5.TurboC2.0提供的格式字符如下:符号作用%c单个字符%d十进制有符号整数%e以科学记数法的形式输出十进制的浮点数如2.451e+02%f输出十进
6、制浮点数,不带域宽时,保留6位小数%g选用e或f格式中较短的一个输出十进制浮点数,不输出无效零%0无输出无符号八进制整数%p指针的值%s输出字符串%u输出无符号十进制整数%x,%X输出无符号十六进制整数(不输出前缀Ox)2.一些特殊规定字符字符作用换行f清屏并换页回车Tab符xhh表示一个ASCII码用16进表示,其中hh是1到2个16进制数使用这些转义字符时不需要加上%,可单独使用!由本节所学的printf()函数,并结合上一节学习的数据类型,编制下面的程序,以加深对TurboC2.0数据类型的了解。例1includeincludeintmain()charc,s20,*p;inta=123
7、4,*i;floatf=3.141592653589;doublex=0.12345678987654321;p=Howdoyoudostrcpy(s,Hello,Comrade*i=12;c=x41printf(a=%d,a);printf(a=m,a);printf(a=d,a);printf(a=-,a);printf(*i=M,*i);printf(*i=%-4d,*i);printf(i=%p,i);printf(f=%f,f);printf(f=6.4f,f);printf(x=%lf,x);printf(x=.16lf,x);printf(c=%c,c);printf(c=%x,
8、c);printf(s=%s,s);printf(s=%6.9s,s);printf(s=%p,s);printf(*p=%s,p);printf(p=%p,p);getch();retunr0;其他需要注意的一些问题:1.假如用浮点数表示字符或整型量的输出格式,小数点后的数字代表最大宽度,小数点前的数字代表最小宽度。例如:%6.9s表示显示一个长度不小于6且不大于9的字符串。若大于9,则第9个字符以后的内容将被删除。2.使用printf函数时还要注意一个问题,那就是输出表列中的求值顺序。不同的编译系统不一定一样,能够从左到右,可以从右到左。TurboC是按从右到左进行的。请看下面两个例子:例
9、1main()inti=8;printf(%d%d%d%d%d%d,+i,-i,i+,i-,-i+,-i-);运行结果8778-7-8例2main()inti=8;printf(%d,+i);printf(%d,-i);printf(%d,i+);printf(%d,i-);printf(%d,-i+);printf(%d,-i-);运行结果:9889-8-9这两个程序的区别是用一个printf语句和多个printf语句输出。但从结果能够看出是不同的。为什么结果会不同呢?就是由于printf函数对输出表中各量求值的顺序是自右至左进行的。在第一例中,先对最后一项-i-求值,结果为-8,然后i自减
10、1后为7。再对-i+项求值得-7,然后i自增1后为8。再对i-项求值得8,然后i再自减1后为7。再求i+项得7,然后i再自增1后为8。再求-i项,i先自减1后输出,输出值为7。最后才求输出表列中的第一项+i,此时i自增1后输出8。但是必须注意,求值顺序虽是自右至左,但是输出顺序还是从左至右,因而得到的结果是上述输出结果。补充:近期在调试程序时发现一段代码如下:printf(sFormat,%0?,THE_NUMBER_LEN);输出数组后发现sFormat=d;其中宏THE_NUMBER_LEN定义的为4,发现假如需要通过在printf转化的数组中出现%,那么就使用%来代替,且后面的所有字符都
11、会直接放入sFormat数组中一直碰到新的%。只要碰到%+特定字符,才会把右边对应的变量放入进来。例如:printf(sFormat,ABC%d%d%s?bc,THE_NUMBER_LEN,6);输出为ABC?%s6abc;还有就是发现假如是修改成%0?,输出的字符串就变成?,这样我猜测就是在printf函数时,碰到第一个%0后知道再遇见下一个%前,假如中间没有特定字符d,s,e,f等,统统变成空格,而我在%中间增加两个的非特殊字符后,发现?前面的空格急剧增加,原因就不清楚。故两%之间不能增加其他非特殊字符。二Scan函数数scanf()函数是格式化输入函数,它从标准输入设备(键盘)读取输入的
12、信息。其调用格式为:scanf(格式化字符串,地址表格式化字符串包括下面三类不同的字符;1.格式化讲明符:格式化讲明符与printf()函数中的格式讲明符基本一样。2.空白字符:空白字符会使scanf()函数在读操作中略去输入中的一个或多个空白字符。3.非空白字符:一个非空白字符会使scanf()函数在读入时剔除掉与这个非空白字符一样的字符。注意:(1)地址表是需要读入的所有变量的地址,而不是变量本身:-假如是一般的变量,通常要在变量名前加上;但输出时是用变量名-假如是数组,用数组名就代表了该数组的首地址;输出时也是用数组名-假如是指针,直接用指针名本身,不要加上*;输出时也用该指针即可。例1
13、:各个变量的地址之间同,分开。main()inti;char*p,str20;scanf(%d,scanf(%s,p);scanf(%s,str);printf(i=%d,i);printf(%s,p);printf(%s,str);2scanf函数中能否包含空白/非空白字符导致输入格式的不同如:scanf(%d,%d,i,scanf中有,所以输入的格式应该是5,6=i=5,j=6scanf(%d%d,i,能够用空格或回车来分隔两个输入如56=i=5,j=6scanf(%d%d,i,同上(3)实际使用scanf()函数时存在一个问题,下面举例进行讲明:当使用多个scanf()函数连续给多个字符
14、变量输入时,例如:main()charc1,c2;scanf(%c,c1);scanf(%c,c2);printf(c1is%c,c2is%c,c21,c2);运行该程序,输入一个字符A后回车(要完成输入必须回车),在执行scanf(%c,c1)时,给变量c1赋值A,但回车符仍然留在缓冲区内,执行输入语句scanf(%c,c2)时,变量c2输出的是一空行,假如输入AB后回车,那么输出结果为:c1isA,c2isB。要解决以上问题,能够在输入函数前参加去除函数fflush()(这个函数的使用方法将在本节最后讲述)。修改以上程序变成:includemain()charc1,c2;scanf(%c,
15、c1);fflush(stdin);scanf(%c,c2);printf(c1is%c,c2is%c,c1,c2);在输入字符数据时,若格式控制串中无非格式字符,则以为所有输入的字符均为有效字符。例如:scanf(%c%c%c,a,b,输入为:def则把d赋予a,赋予b,e赋予c。只要当输入为:def时,才能把d赋于a,e赋予b,f赋予c。假如在格式控制中参加空格作为间隔,如:scanf(%c%c%c,a,b,则输入时各数据之间可加空格。例4main()chara,b;printf(inputcharactera,bscanf(%c%c,a,printf(%c%c,a,b);由于scanf函
16、数%c%c中没有空格,输入MN,结果输出只要M。而输入改为MN时则可输出MN两字符。(4)格式字符串的一般形式为:%输入数据宽度长度类型其中有方括号的项为任选项。各项的意义如下:1)类型:表示输入数据的类型,其格式符和意义如下表所示。格式字符意义d输入十进制整数o输入八进制整数x输入十六进制整数u输入无符号十进制整数f或e输入实型数(用小数形式或指数形式)c输入单个字符s输入字符串2)*符:用以表示该输入项,读入后不赋予相应的变量,即跳过该输入值。如:scanf(%d%*d%d,a,当输入为:123时,把1赋予a,2被跳过,3赋予b。3)宽度:用十进制整数指定输入的宽度(即字符数)。例如:sc
17、anf(,输入:12345678只把12345赋予变量a,其余部分被截去。又如:scanf(MM,a,输入:12345678将把1234赋予a,而把5678赋予b。例:main()inta,b;scanf(MM,a,printf(a=%d,b=%d,a,b);输入1234567890运行结果a=1234,b=54)长度:长度格式符为l和h,l表示输入长整型数据(如%ld)和双精度浮点数(如%lf)。h表示输入短整型数据。使用scanf函数还必须注意下面几点:1)scanf函数中没有精度控制,如:scanf(%5.2f,是非法的。不能企图用此语句输入小数为2位的实数。2)在输入多个数值数据时,若格式控制串中没有非格式字符作输入数据之间的间隔则可用空格,TAB或回车作间隔。C编译在碰到空格,TAB,回车或非法数据(如对%d输入12A时,A即为非法数据)时即以为该数据结束。c语言中scanf的用法c语言中scanf的用法的用法你知道吗?下面我就跟你们具体介绍下c语言中scanf的用法的用法,希望对你们有用。c语言中scanf的用法的用法如下:Printf和Scan函数的使用方法一printf()函数是格式化输出函数,一般用于向标准输出设备按推荐度:
限制150内