Страницы

Поиск по вопросам

воскресенье, 22 декабря 2019 г.

Магическое изменение значения переменной после scanf

#c


Всем привет. Столкнулся с какой-то абсолютно мистической проблемой.

Есть код на Си:

int main(int argc, char const *argv[]) {
unsigned int  a, A = 0;
unsigned short tmp = 0;
scanf("%u", &a); // вводим значение, будем считать, что 3
//a = 3;
for (int i = 0; i < a; i++) {
    printf("--%u\n", a); // a == 3
    scanf("%u", &tmp);
    printf("--%u\n", a); // внезапно а == 0
    A |= 1 << tmp;
}

return 0;
}



Примечание: Если раскомментировать строку //a = 3 и убрать первый scanf, все адекватно
работает.

Надеюсь, из комментариев в коде все понятно. Переменная a в цикле каким-то магическим
образом меняет свое значение после строки scanf("%u", &tmp); 

Ломаю голову уже часов 5, поэтому прибежал к вам. В чем вообще тут проблема может
скрываться?
    


Ответы

Ответ 1



Попробуйте написать не scanf("%u", &tmp);, а scanf("%hu", &tmp);: у вас же short int, а не int...

Комментариев нет:

Отправить комментарий