...
char A,M,Q,Q_1,count;
int main()
{
system("cls");
count=8;
printf("%d",count);
printf("\n\tEnter the Multiplicand(M) : ");
scanf("%d",&M);
printf("\n\tEnter the Multiplier(Q) : ");
scanf("%d",&Q);
printf("%d",count); //prints 0???????
.......
}
我不明白'count'的值如何变为0。
plz帮助...... 感谢。
系统:win7 / VS2008
编辑: 在深入了解我在做什么之后(感谢PéterTörök),我在scanfs之后将作业移到了'count',这解决了问题......谢谢。
答案 0 :(得分:5)
由于您尝试使用%d
读取整数(scanf
)并将其存储在char
变量中,因此存在内存溢出:char
为1个字节而int
是(通常)4。结果是变量M
之后的内存区域被覆盖了。Q
。这也会影响count
。
将变量声明为int
以避免这种情况(或使用char
明确读取scanf
值 - 但如果要将值相乘,最好从{{1}开始立即开始,以至少减轻整数溢出的风险。)
答案 1 :(得分:3)
不要欺骗编译器。
你先说M是个字符
char A,M,...
然后尝试将其用作int
scanf("%d",&M);
不要那样做!
将M(和其他变量)声明为int,或将scanf声明为char