全局变量值自动变化?

时间:2010-11-12 10:43:04

标签: c

...

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',这解决了问题......谢谢。

2 个答案:

答案 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