C Primer Plus学习_6之printf()和scanf()【中】

好了 , 又到了今天的学习时间。

上一期说了转换声明的使用,这一期的开始先说一说转换声明的意义。

转换声明把以二进制格式储存在计算机的值转换成一系列字符(字符串)以便于显示。例如,数字76,在计算机中的储存格式是二进制数01001100。%d转换说明将其转换成字符7和6,并显示76;%x转换说明将其转换成十六进制数4c;%c转换说明将其转换成字符L。

这里说到了二进制,十六进制,还有一个八进制,都是计算机中常用的,今天在发出这篇文章的同时,还会再发一集进制数转换的专题篇,这里就不多赘述了。

【注1】:转换不匹配

        转换说明应该与待打印值相匹配,转换说明通常有多种选择,例如:int类型的值可用%d  %x  %o他们的区别在于表示的值的形式不同;同样,double也可以用%e  %f  %g。如果转换说明与待打印值不相匹配会怎么样呢?

来看一个例子intconv.c程序如下

#include <stdio.h>
#define PAGES 666
#define WORDS 66666 
int main(void)
{
	short num = PAGES;
	short mnum = -PAGES;
	
	printf("num as short and unsigned short: %hd %hu\n",num,num);
	printf("-num as short and unsigned short: %hd %hu\n",mnum,mnum);
	printf("num as int and char :%d  %c\n",num,num);
	printf("WORDS as int ,short ,and char : %d  %hd  %c\n",WORDS,WORDS,WORDS);
	
	return 0;
	
 } 

输出结果:

num as short and unsigned short: 666 666
-num as short and unsigned short: -666 64870
num as int and char :666  ?
WORDS as int ,short ,and char : 66666  1130  j

可以见得,当二者不匹配时,就会得不到想要的值 。所以一定要想清楚对应的关系,以避免这样的输出错误,具体的对应表格在前几期都陆续给出了,大家可以多多回顾,顺便点一波关注。

 

以上体现的都是参数传递的问题。

参数传递机制因实现而异,下面我们来分析一下参数传递的原理:

如printf("%ld %ld %ld %ld\n",n1,n2,n3,n4);

该调用告诉计算机把变量n1,n2,n3和n4的值传递给程序,这是一种常见的传递方式。程序把传入的值放入被称为栈的内存区域。计算机根据变量类型(不是根据转换说明)把这些值放入栈中。然后,控制转到printf()函数中,该函数根据转换说明(不是变量类型)从栈中读取值。


【注2】printf()的返回值

大部分C函数都有一个返回值,这是函数计算并返回给主函数的值。

例如,C库包含一个sqrt()函数,接受一个数作为参数,并返回该数的平方根。可以把返回值赋给变量,也可以用于变量,还可以用于参数传递。总之,可以把返回值当作其他值一样使用。而printf()的返回值是它打印的字符的个数,但如果输入错误printf()的返回值就是一个负数。

【注3】打印较长字符

有时,printf()语句太长,在屏幕上不方便阅读。因此一条语句可以写成多行,只需要在不同部分输入空白即可。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值