значение глобальных переменных меняется автоматически? - PullRequest
1 голос
/ 12 ноября 2010
...

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.

помогите плз ... спасибо.

Система: win7 / VS2008

EDIT: Получив представление о том, что я делал (спасибо Péter Török), я переместил назначение в 'count' после scanfs, это решило проблему ... спасибо.

Ответы [ 2 ]

5 голосов
/ 12 ноября 2010

Поскольку вы пытаетесь прочитать целое число (%d) с помощью scanf и сохранить его в переменной char, возникает переполнение памяти: char равно 1 байту, а int - (обычно ) 4. В результате область памяти после переменных M, а затем Q перезаписывается. И это также влияет на count.

Объявите ваши переменные как int, чтобы избежать этого (или явно прочитайте char значения с помощью scanf - но если вы хотите умножить значения, лучше начать с int сразу, по крайней мере уменьшить риск целочисленного переполнения).

3 голосов
/ 12 ноября 2010

Не врите компилятору.

Сначала вы сказали, что M - это символ

char A,M,...

, а затем попытались использовать его как int

scanf("%d",&M);
* 1008.* Не делайте этого!

Либо объявите M (и другие переменные) как int, либо отсканируйте char

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...