#cpp #c
Имеется следующий код: #includeint main() { int UnitStateWord; unsigned char c,f; printf("Insert state code (0 - 31) >"); scanf("%d",&c); UnitStateWord = (c & 0x1F) << 11; printf("\n? The result = %04x\n", UnitStateWord); printf("Insert if error exists (0/1) >"); scanf("%d",&f); UnitStateWord |= (f & 1) << 9; printf("\n? The result = %04x\n", UnitStateWord); } На вход поступило: 1, затем ещё 1, вывод видно в The result. Почему после второго ввода и выполнении соответствующей операции UnitStateWord |= (c & 1) << 9; Переменная UnitStateWorld = 200? В моем понимании она должна быть равна A00.
Ответы
Ответ 1
Скорее всего, затирание соседней памяти из-за неверного спецификатора %d. Замените его на %hhd - для unsigned char.Ответ 2
У вас четыре ошибки при интерпретации стандартного ввода. Во-первых спецификатор формата для unsigned char должен быть %hhu (доступен начиная с С++11, до этого заполнить переменные такого типа было нельзя). Во вторых отсутствует проверка значения, возвращаемого scanf, поэтому в обе переменные c и f так и могут остаться неинициализированными.Ответ 3
Мучаясь в течение дня с теми или иными способами, дабы исправить эту проблему, сменил IDE и соответственно компилятор на VC. Всё работает без ошибок, в чём проблема - неизвестно.
Комментариев нет:
Отправить комментарий