深入分析C语言中的scanf函数和printf函数

来源 :商品与质量·理论研究 | 被引量 : 0次 | 上传用户:liongliong577
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘 要:格式输入函数scanf和格式输出函数printf是C语言程序中使用较频繁的两个函数,其格式非常相像,容易混淆,本文特此给以以下几点区分。
  关键词:C语言 scanf函数 printf函数
  scanf函数和printf函数是C语言中最常用且功能最强的输入输出函数,这两个函数格式比较相像,使用时容易混淆的地方很多,让人很费解。以下给以几个容易混淆点的区分(注:运行结果都是基于VC++ 6.0运行环境)。
  一. 两个函数的定义[1]
  scanf函数称为格式输入函数,即按照用户指定的格式从键盘上把数据输入到指定的变量中。
  scanf函数调用的一般形式:scanf("格式控制字符串",地址表列);
  其中,格式控制字符串用于指定输入格式,格式控制串可以由格式字符串和非格式字符串两种组成。地址表列中给出各变量的地址。
  printf函数称为格式输出函数,其功能是按照用户指定的格式,把指定的数据显示到显示器屏幕上。
  printf函数调用的一般形式:printf("格式控制字符串",输出表列);
  其中,格式控制字符串的作用与scanf函数相同,它可以由格式字符串和非格式字符串两种组成。格式字符串是以%开头的字符串,非格式字符串在输出是原样输出,在显示中起提示作用。输出表列给出各个输出项。
  二、scanf函数和printf函数的易混点
  1、 scanf函数输入数据时不能规定精度,但可以规定宽度[2]。如:scanf("%5.2f",&a);是不合法的,不能企图用此语句输入一个小数点后有两位的实数。
  另外,scanf函数可以指定输入数据所占的列数,系统自动按它截取所需的数据。例如:scanf("%3d%3d",&a,&b); 输入:123456<回车>系统自动将123赋值给变量a,456赋值给变量b。
  假设将上例改为scanf("%3d%3d",&a,&b);若输入1234<回车>,则a=123,b=4。
  假设将上例改为scanf("%3d%3d",&a,&b);若输入12<回车>,则相当于变量a接收到了12,而变量b还没有接收到值,系统还会继续等待,直到输入一个值给b才结束scanf语句。
  而对于printf函数,要求则没有那么严格。输出%md,m为指定的输出字段宽度,如果数据的位数小于m,则左端补以空格;若大于m,则按实际位数输出;输出%m.n,指定輸出的数据共占m列,其中有n位小数,如果数值长度小于m,则左端补空格;如果数值长度大于m,则按实际位数输出。
  例如有以下程序段:int x=12; double y=3.141593;printf("%d%8.6f",x,y);的输出结果是(A)
  A)123.141593B)123.141593 C) 12,3.141593D) 123.1415930
  解析:本题考查printf函数的用法。格式字符%d表示按十进制整型数据的实际长度输出,格式字符%8.6f指定输出地数据共占8列,其中小数位占6列,总宽度包括小数点占1列,如果数值长度小于8,则左端补空格,而本题y的值3.141593正好占8列,小数位占6列,小数点占1列,恰好输出y的值,因此选A。
  通过以上几个例子,我们可以得出,格式输入函数scanf函数的要求更为严格些,而格式输出函数printf函数的要求更宽松些,这也正符合人性化的特点,电脑作为现代人类社会的一个辅佐工具,人为的输入数据时应该尽量简单,给人减轻一些不必要的脑力劳动的负担,而电脑输出时,则要尽量满足数据本身的特点。
  2、设有如下定义,下面各输入语句中错误的是(B)
  struct student
  { char name[10]; int age;char sex; float score;} stud[3];
  A) scanf("%s",stud[1].name);B) scanf("%d",stud[1].age);
  C) scanf("%C",&stud[1].sex);D) scanf("%f",&stud[1].score);
  解析:本题首先定义了一个结构体名为student的数组stud,这个数组有三个元素分别为stud [0], stud [1]和stud [2],这三个元素都分别有4个成员(姓名,年龄,性别,成绩),本题意在通过scanf函数给数组元素的某个成员赋值,这就涉及到scanf函数的格式问题,scanf函数调用的一般形式为scanf("格式控制字符串",地址表列);其中的地址表列必须是地址,C语言中的地址大致就三种,一种是由&引导的,如选项D,由于score成员是单精度型,其地址就是在score变量前加个寻址符号即可,选项B、C与D同理,很明显,选项B的age成员放在地址表列处就要加寻址符号&符号,所以本题选B。另外一种特殊的就是数组名,C语言的数组名代表数组首元素的地址,所以要用scanf函数给数组赋值,则地址表列直接写数组名就可以,而不必在数组名前加寻址符号&符号,如选项A正是如此,所以在scanf函数的地址表列不用加寻址符号&符号。还有一种地址表示方式,就是指针,如果scanf的地址表列放的是指针变量,由于指针本身代表的就是地址,所以也不用寻址符号&符号。
  又例如[3]
  #include
  main()
  { char *a[ ]={"abcd","ef","gh","ijk"};
  int i;
  for(i=0;i<4;i++)
  printf("%c",*a[i]);
  }
  程序运行后的输出结果是(A)
  A) aegi B) dfhk C)abcd D) abcdefghijk
  解析:main函数中定义了一个指针数组a,它有4个元素,其初值分别是"abcd"、"ef"、"gh"、"ijk"4个字符串的首地址。然后利用for循环语句进行输出,其中格式符%c表示只输出一个字符,而a[i]是一个地址,指向字符串的第一个字符,因此printf("%c",*a[i])函数输出第i个字符串中的第一个字母,即aegi,本题选A.
  如果将printf("%c",*a[i]);改为printf("%s", a[i]);则选D。因为printf函数的输出表列变为a[i],很明显是个指针,它存储的是所指向的字符串的首元素地址,以%s输出,则直到碰到字符串结束标识符'\0'才停止输出,也就是说会输出a[i]所指的字符串。
  通过以上两个例子我们可以总结出,scanf函数的地址表列只能是地址。而printf函数的输出表列可以是地址(指针变量,数组名,带&的变量)也可以是数值或数值型变量。
  三、 结语
  以上就是scanf函数和printf函数特别容易混淆的一些地方,对于初学C语言者,不要死记硬背它们的格式,而应该多巩固知识点,或者结合VC++ 6.0 软件就会事倍功半。希望以上分析对于从事C语言编程的人员能提供必要地帮助。C语言本身是一门丰富的语言,其语言变化丰富多样,有时简单的一道题只需改一个符号,整个题的运行过程运行结果就截然不同。所以对于每个知识点的把握一定要透彻,这样才能更好地驾驭这种语言。
  注释:
  [1][2]谭浩强.C程序设计(第三版).北京:清华大学出版社,2005:74-86.
  [3]全国计算机等级考试历届笔试真题详解,二级C语言程序设计,天津:南开大学出版社,2011:140.
  作者简介:岳娜莉(1986-),女,陕西渭南人,天津师范大学教育科学学院教育技术学2009级硕士研究生,研究方向:远程教育及网络技术。
其他文献
摘 要:持续审计在我国正逐步展开,本文从目前持续审计开展的现状出发,分别站在法律法规、实施条件、审计人员素质三个角度探讨了我国持续审计有效运行的保障措施。  关键词:持续审计;开展现状;保障措施  1999年,AICPA/ CICA(加拿大注册会计师协会/美国注册会计师协会)联合发布的"持续审计报告"中,对持续审计作了如下阐述:"持续审计是指一种由独立的审计师使用的,在一系列审计报告的基础上为一个
期刊
摘 要:财务风险是现代企业财务管理中一个重要的理论和实践问题,不仅关系到企业的日常交易和经营活动,而且还与企业的投资、融资、股利决策等相关。本文通过对辽宁省2009年、2010年的62家A股上市公司的年报数据进行实证分析,旨在研究上市公司的财务风险情况,并针对研究出的结论提出了相应的几点建议。  关键词:上市公司;财务风险;实证  一、财务风险概述  财务风险大体可归纳为3类:一是"收益差异观",
期刊
摘要:2011年2月18日,太行水泥终止上市,标志着金隅股份换股吸收太行水泥接近尾声。本次金隅股份首次公开发行A股暨换股吸收太行水泥,是其在资本市场的再次精彩亮相,有助于未来产业链的发展。本文通过金隅股份换股吸收合并太行水泥的并购案例进行研究,分析了在此次并购中及并购后,对股东权益的保护。  关键词:换股;吸收合并;权益保护  一、合并方案  (一)双方简介  1、金隅股份  金隅股份主要从事水泥
期刊
摘 要:国际河流的开发既涉及到生态环境的保护,也涉及到各国的利益,如何能够更好的开发和合作是目前各方都在努力的探寻,本文以美国加拿大共同开发哥伦比亚河为例,探寻国际河流开发的双赢模式。  关键词:国际河流 水资源 上下游利益 责任  国际河流的开发涉及到国家间关系、生态环境的保护问题,也涉及到流域内国家经济和社会的发展。国际河流的开发处理不恰当,可能会引起双方或多方的国际纠纷。因此联合国有关机构和
期刊
摘要:研发(R&D)投入的规模与强度是衡量企业创新能力的重要指标,也是企业自主创新能力培育和提升的基础活动。本文在国内外学者研究的基础上,结合隐形冠军企业--杭州之江有机硅化工有限公司,通过问卷调查了解该企业R&D活动的实际情况,提出全员创新文化、激励机制、学习机制、企业经营环境和政府环境五个影响企业R&D活动的因素,运用SPSS软件对所得数据进行分析,得出相关结论,并为之江保持隐形冠军企业优势提
期刊
摘要:从一定意义上来说,文化与法律是本质与现象的关系。文化渗透于法律之中,法律体现一定本土文化。本文通过挖掘潜藏于亲子法中的孝文化,并对其存在的历史合理性与局限性加以鉴别。同时,从"权变"的角度,寻找孝文化发展的科学态势,并用权变后的孝文化指导当今的亲子立法。  关键词:孝文化、亲子法 、权变观  一、中国古代法律中的亲子关系  亲子关系又称父母子女关系。它不仅是所有社会家庭关系的核心组成部分,也
期刊
摘要:我国的信用评级市场是随着社会主义市场经济的建立而不断发展起来的。金融体制的改革、新的金融品种的推出,以及国外评级机构的进入,大大地促进了我国评级市场的发展。然而目前我国的信用评级机构一方面与国际著名的信用评级机构存在着很大的差距,另一方面也与国内金融市场发展的需要存在一定的差距。因此,在进一步规范的基础上促进我国评级市场的发展具有非常重要的意义。  关键词:证券市场 信用评级 金融监管 证券
期刊
摘要:管辖是民事诉讼中的基本制度,现行法律对于管辖问题已有较为明确的规定,然而实践中却有诸多对策来规避管辖,对此我们首先需要了解规避的手段从而才能对症下药,完善立法,以促进民事诉讼追求的终极目的--实现司法程序的公平与公正。  关键词:管辖权 规避 争夺  我国是法治一元化的国家,在大陆任何一家法院适用的都是同样的法律,按理说法院判决的结果都应当是一样的。 正所谓"管辖之规定, 乃系法院互相间事务
期刊
摘 要:本文以SERVQUAL量表為基础,采用因子分析法确定适合专业市场服务质量的评价指标体系,它包括有形性、保证性、响应性、移情形、可靠性和额外服务等6个维度,并对海宁中国皮革城的服务质量进行了较全面的评价,进而提出相关建议,为专业市场的服务质量管理提供理论与现实参考。  关键词:服务质量;SERVQUAL模型 ;专业市场  一、引言  中国的专业市场自20世纪80年代起源以来发展迅速。随着市场
期刊
摘 要:管理育人是高校人才培养的重要工作,在落实科学发展观,构建和谐校园的新形势下,高等学校必须要树立以人为本的观念,坚持"以人为本",突出学生主体地位;坚持与时俱进,开拓创新,为建设中国特色社会主义事业培养德智体美全面发展的高素质的建设者和接班人。  关键词:高校辅导员;管理育人;以人为本  管理育人是高校人才培养的重要工作,也是教育学的一条重要原理。管理育人是指高校的各级各类管理人员,把育人贯
期刊