C中scanf的问题

来源:百度知道 编辑:UC知道 时间:2024/05/17 20:55:06
程序:
……
语句1:unsigned char a,b;
……
语句2:printf("input a:");
语句3:scanf("%d",&a);
语句4:printf("input b:");
语句5:scanf("%d",&b);
……

输入a,b分别为1,22
当执行完语句5时,发现a值为0

是因为整型-unsigned char型转换时,冲掉了后面的16位吗?
还是什么原因?
……

这种问题是使用C语言时最容易出现,也最不容易排除的。关键在于格式符与变量类型不匹配。既然变量是字符型,不可以用%d直接进行输入,而必须再定义一个整型临时变量输入,然后用赋值语句进行显式转换!

不应该输入: 1,22
应: 1 (回车键)再输入 22
这是c语言scanf()函数的特点.可以看潭浩强的书,里面有详细的介绍

scanf("%d",&a);
改为 scanf("%c",&a); 就应该可以了

若输入1,22的话一定会出错的,正确的输入是1 22
还可能输入不匹配,改
scanf("%s",&a);