Страницы

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

среда, 14 ноября 2018 г.

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

Всем привет. Столкнулся с какой-то абсолютно мистической проблемой.
Есть код на Си:
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
", a); // a == 3 scanf("%u", &tmp); printf("--%u
", a); // внезапно а == 0 A |= 1 << tmp; }
return 0; }
Примечание: Если раскомментировать строку //a = 3 и убрать первый scanf, все адекватно работает.
Надеюсь, из комментариев в коде все понятно. Переменная a в цикле каким-то магическим образом меняет свое значение после строки scanf("%u", &tmp);
Ломаю голову уже часов 5, поэтому прибежал к вам. В чем вообще тут проблема может скрываться?


Ответ

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

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

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