scanf细节--字节问题

scanf非常简单的函数,估计不少人一开始学的就是它吧,但我从来都没有去直视过它,直到今天调程序时出现的小小插曲。

定义一个变量:unsigned char a;

然后:scanf("%d",&a);

知道的人一看就知道问题出现在哪了,但是,恰恰我忽略了。

本来只写一句是没什么问题的,程序正常,可是,刚好问题出现了。

定义几个变量:unsigned char a,b,c,d,e,f;

然后:

scanf("%d",&a);

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

scanf("%d",&b);

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

scanf("%d",&c);

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

scanf("%d",&d);

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

scanf("%d",&e);

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

scanf("%d",&f);

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

程序就这样,然后执行看结果,又正常。

可是你接下来接一句:

printf("%d\t %d\t %d\t  %d\t %d\t %d\t ",a,b,c,d,e,f);

你就会发现,问题出现了,打印出来的东西错了。

仔细分析,原来scanf出了问题,scanf与printf不同的是,他的参数是一个指针,sacnf中%d是占4个字节,而unsigned char 只占一个字节,当scanf单句执行时,能正常获取输入的值,继续执行的时候,就会把前面的3个字节给清除掉了,到最后你就发现前面a,b,c的值变为0了。

当然,改成%c或定义为int类型就ok了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值