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了。