vlambda博客
学习文章列表

C语言拓展第六期:格式化输出

前边我们学习了不同种类的数据类型,为了将这些数据输出到终端我们学习了printf函数。但前边的学习更多的是简单的套用,并没有理解printf语句里每个部分的含义。于是我们有了今天的学习内容——C语言的格式化输出。在学习了本节内容后,你就可以按照自己的想法来输出各种格式的语句了。




printf函数是一个可变参数函数也就是说printf函数的参数的个数和类型都是可变的,每一个参数的输出格式都有属于自己的格式声明。格式声明由“%”和格式字符组成,如“%d%f”,其作用是将输出的数据转换为指定的格式然后输出。

printf("%d\n",5);

C语言拓展第六期:格式化输出

                        

5”意为输出的数据为5%d为以十进制整数形式输出,执行‘\n’使输出控制移到下一行的开头。其中"%d\n"称为格式控制字符串,由“格式声明”和“普通字符”组成。普通字符是指在输出时需要在输出的时候原样输出的字符。


printf("单词car中的字母的数量为 %d \n",3);


C语言拓展第六期:格式化输出

“单词car中的字母的数量为      %d  \n”这里边的汉字和空格、换行符等就属于普通字符。“,”后面的部分叫做“输出表列”,输出表列中是程序需要的一些数据,可以是变量、常量或表达式。要想将“输出表列”中的参数进行输出,格式控制字符串中必然有一个格式声明与之对应,第一个格式声明对应第一个参数、第二个格式声明对应第二个参数、以此类推。

C的学习过程中我们可能不仅仅会看到%d%f%c,还可能看到%e%o%x%12d等等一系列奇怪的格式声明。它们究竟代表什么意思?


%d 表示十进制、有符号的形式输出 int 类型的整数。
printf("%d\n%d\n",5,-16);


C语言拓展第六期:格式化输出
%u 表示十进制、无符号的形式输出 int 类型的整数。
printf("%u\n%u\n",5,-16);


C语言拓展第六期:格式化输出

这时我们发现在输入为正数的时候程序正常输出正数,但是在输入为负数的时候,输出变为了一个十分奇怪的数。它似乎是一个随机产生的很大的数。其实不然,多次试验过后你会发现——如果是-x的话,输出 4294967496-x。在学习了补码等相关知识后就会明白为什么会输出这样一个数了,现在我们先知道结果就好了。我们已经尝试了不按照格式随意输入数据,得到的结果与我们预期相差甚远。有了这次的教训我们以后一定要在输入输出的时候注意——格式声明要和参数相对应。

对于整型数据:

%hd%d%ld 分别表示以十进制、有符号的形式输出 shortintlong 类型的整数。

 %hu%u%lu 分别表示以十进制、无符号的形式输出 shortintlong 类型的整数

对于字符型数据:

%c用来表示一个字符

printf("%c\n",'A');


C语言拓展第六期:格式化输出

有些比较调皮的同学可能还会用一些不符合要求的输入数据去尝试,来观察电脑的反映。这时候如果你去输入一个整数,比如“36”和“122”。

       printf("%c\n%c\n",36,122);

C语言拓展第六期:格式化输出


这时候你会发现输入的是数字,输出的却可能是字母或符号。这是因为如果输入的整数在0~127范围内,输出时系统会将该数作为ASCII码转换成相应的字符。如果整数比较大,则把它的最后一个字节的信息以字符形式输出。

      

printf("%c\n%c\n",121,377);

C语言拓展第六期:格式化输出

%c格式输出时,只考虑一个字节,377的最后一个字节中的信息是01111001,即十进制的121,这也是“y”的ASCII代码。

想了解更多关于 ASCII 的内容,这里我们引用了百度百科的内容: https://baike.baidu.com/item/ASCII/309296?fromtitle=ascii
%E 7%A0%8 1%E8%A1%A8&fromid=19660475&fr=aladdin
除了以上两种格式符之外还有很多对应其他数据格式的格式符,
%s——用来输出一个字符串

   

 printf("%s\n","FUNQU KE TANG");


C语言拓展第六期:格式化输出

%f——用来输出实数

   

 printf("%f\n",5.0);


C语言拓展第六期:格式化输出

这里输出的数据不指定长度,实数部分全部输出,小数部分只输出6位。

如果想更改小数的位数,可以通过在%.n”的方式来更改。

     

 printf("%.3f\n",56.7896);


C语言拓展第六期:格式化输出

这里的n就是保留小数的位数,保留的时候对后边的数据采取四舍五入的保留方法。

如果想对数据的宽度做出调整呢,只需要按照“%m.n”的格式来输入格式符就可以了,其中m是数据的宽度,也就是列数,n依旧是保留小数的位数。我们举个例子大家就明白了。

    

 printf("%10.2f\n",213.5);


C语言拓展第六期:格式化输出


2”的前边还有四个“空格”。这里我们看到输出结果是右对齐的,在程序中默认的输出结果是右对齐的,如果想要左对齐只需要在“m”前边加上个“-”。

      

printf("%-10.2f\n",213.5);


C语言拓展第六期:格式化输出


加上“-”也就是减号后数据就左对齐了。相应的“+”是右对齐,但是由于默认的也是右对齐,我们一般就将这个“+”省略了。

   

 printf("%+10.2f\n",213.5);


这时的结果是这样的。

C语言拓展第六期:格式化输出


最后一个我们要介绍的是使用科学计数法来输出数据。格式也很简单“%e”或“%E两者唯一的区别就是输出时表示科学计数法中的“e”是大写还是小写。

printf("%E\n",213.5);


printf("%e\n",213.5);



 

其他的格式符还有诸如八进制的“%o”、十六进制的“%x”等使用方式和上面介绍的差不多,理解其原理之后,稍稍修改一下代码便可以轻松使用。我们这里便不再一一赘述了。