问题描述
- 关于char a,b,c,%d,%c%d分两次用scanf函数输入,却清零了第一次的数值问题
-
#include
#include
main()
{
unsigned char a,b,c;scanf("%d",&a);
printf("%dn",a);
getchar();
printf("%dn",a);
scanf("%c %d",&b,&c);printf("%d,%c,%dn",a,b,c);
}
这里使用了两次scanf,第一次输出两次a的值,都没有问题,到第二次scanf之后,a的值就发生了改变,实验过在同一行并不会发生问题,请问,为什么使用两次scanf,第二次会把第一次scanf()输入的数值清零?
解决方案
因为abc都是char,而你用了%d,而scanf不会对类型做检查,因此它冲掉了c之后的那个变量,因为堆栈是倒过来的,而a在前面,就冲掉了。
解决方案二:
你用%d输入就把c之后的变量覆盖了
解决方案三:
说句题外话,话说char类型为何还要用unsigned?
时间: 2024-10-01 03:14:29