经过两周的C++学习,大家已经可以熟练的使用C++的标准输入输出流cin和cout进行数据的输入和输出。然而在C语言中是没有流的概念的。C语言的输入输出都需要使用标准输入输出函数scanf()和printf()来实现。C++包含了C语言的所有内容,自然也可以使用。在我们C++程序设计课程的期末考试中,C语言的编程题占很大的比重。所以对scanf()和printf()的使用也是需要我们掌握的。
然而对于我们来说,scanf()和printf()两个函数是比较难以理解却最为基础的。在C语言中,它们是定义在是stdio.h这个标准输入输出的头文件中的。在C++中,iostream也集成了这两个函数。
首先来看一下scanf()和printf()的标准定义:
![]()

_Check_return_opt_ _CRTIMP int __cdecl printf(_In_z_ _Printf_format_string_ const char * _Format, ...);
_Check_return_ _CRT_INSECURE_DEPRECATE(scanf_s) _CRTIMP int __cdecl scanf(_In_z_ _Scanf_format_string_ const char * _Format, ...);
(C++语言最可怕的一点就是它的标准库函数的定义完全非人类能够读懂的)
让我们来简化一下,并用自然语言描述:
嗯这样看起来好些了(虽然还是不懂。。。)
接下来我会首先讲解printf()函数的使用。
printf
格式:printf(格式控制串,表达式表)
功能:从标准输出设备上,按指定的格式输出对应的变量
追溯printf函数输出的实质,实际上它输出的是格式控制串的内容。格式控制串是一个字符串常量。根据昨天的学习,我们应该能够知道,字符串产量应该是用英文的双引号””引起来的一串由字母(a,b,c…)、数字(1,2,3…)、符号(!,?,%...)等字符组成的一个常量,例如”abc_a”、”hello World!”、”a1234567890@”等。在使用printf函数进行输出的时候,程序会将格式控制串中的每一个字符原样的输出到标准的输出设备上,即程序运行的小黑框中。
例如:printf(“I am Mike.”)的输出结果:
到这里,我们已经基本上了解了printf函数输出的原理。既然这样,就有熊孩子问了:我们写程序不可能永远只输出一个字符串常量吧,如果我要输出一个变量的值怎么办呢,就像“cout<<a<<endl;”输出变量a的值一样。别着急,接下来,我会带大家扩展之前讲的printf函数功能。
既然printf函数的第一个参数叫做“格式控制串”,自然除了原样输出它的值以外还是有道理的。这就涉及到昨天最后说道的转义字符了。在C++中,%也是一个转义字符,能够将它后面紧接着的一个字母转义,%和那个字母的整体是一个字符,称为格式控制串。常见的格式控制串有如下几种:
如果在格式控制串中有格式控制符,系统就会自动识别这个格式控制符,并在printf的“表达式表”中去匹配变量,输出变量的值。在使用格式控制符时要注意以下4点:
1. 格式控制串的控制符号与变量表要一一对应,即:类型相同,个数相等
2. 格式控制符号尽量用小写字母
3. 格式控制符号之外的符号均照原样显示
4. 若需显示百分号,格式为:%%
说了这么多,还是举个例子给大家看一下吧。比如我们有定义:int a=0;我们要输出a的值,并带有一些提示。我们可以用如下方式实现:
这就相当于是“cout<<”a=”<<a;”这条语句的含义,它们完成的工作是等效的。
除了能够控制输出变量以外,printf函数还可以对变量输出的格式进行修饰。对于整型变量,我们可以控制它输出的位数和对齐方式,对于浮点型变量,我们可以只控制它的整数和小数的输出位数和对齐方式,对于其他类型的变量也可以实现类似的效果。方法是在转义字符%和转义的字母(比如代表整型的d)之间加一个数字。具体实现方式如下:
如果实际数据所占字符位大于指定的域宽,按实际输出。如果实际数据所占字符位小于指定的域宽,就按照对齐方式在输出变量的时候用一定数量的空格补足域宽。
下面分别给出一个简单例子和综合所有控制符的例子:
通过以上两个例子大家可以思考一下格式控制符的使用并掌握了。
根据上面的讲述我们知道,如果实际数据所占字符位小于指定的域宽,就按照对齐方式在输出变量的时候用一定数量的空格补足域宽。然而又有熊孩子问了,可不可以让程序用非空格的其他字符补齐呢?对于整型变量来说是可以实现的。我们可以在%后面再加上一个字符作为补齐域宽的符号,但是貌似只能改成用0补齐。方法是在转义字符%后面加一个0就可以了。例如下面一个程序:
问题描述:输入2个整数time1和time2,表示火车的出发时间和到达时间,计算并输出旅途时间。有效的时间范围是0000-2359(前两位表示小时,后两位表示分钟),不考虑出发时间晚于到达时间的情况。
在这道题中,由于数据的格式是固定的,即4位数,前两位是小时数,后两位是分钟数,所以必须无论最后得到的时间转化成这种形式后有多少位都要输出4位,如果位数不够要用0补齐。根据算法的描述写出以下程序:
输入time1,time2后即可得到正确的结果。
当输入的出发时间和到达时间少于1小时的时候,程序实现了自动用0补齐前两位的小时的功能。
以上便是printf函数的所有内容。大家学会了吗~~
本文介绍了C++中的标准输入输出流cin和cout,以及C语言中的scanf和printf函数。虽然C++中推荐使用cin和cout,但理解scanf和printf有助于C++学习,特别是应对包含C语言编程题的考试。文章详细解释了printf函数的使用,包括格式控制串、格式控制符和位宽修饰,通过实例展示了如何输出变量和控制输出格式。同时,还讨论了用0来补足输出位宽的方法,并提供了一个火车旅途时间计算的案例。
355

被折叠的 条评论
为什么被折叠?



