Имеется следующий код:
#include <stdio.h>
int 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.
Скорее всего, затирание соседней памяти из-за неверного спецификатора %d.
Замените его на %hhd - для unsigned char.
У вас четыре ошибки при интерпретации стандартного ввода. Во-первых спецификатор формата для unsigned char должен быть %hhu (доступен начиная с С++11, до этого заполнить переменные такого типа было нельзя). Во вторых отсутствует проверка значения, возвращаемого scanf, поэтому в обе переменные c и f так и могут остаться неинициализированными.
Мучаясь в течение дня с теми или иными способами, дабы исправить эту проблему, сменил IDE и соответственно компилятор на VC. Всё работает без ошибок, в чём проблема - неизвестно.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости