Имеется следующий код:
#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. Всё работает без ошибок, в чём проблема - неизвестно.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Добрый деньПроблема в чем? - выдает ошибку: "invalid operands of types 'double' and 'double(const char*) throw()' to binary 'operator=='" Вот фрагмент кода, в котором выдает ошибку:
Подключил буст, всё ок, но потом компилятор начал выдвать ошибку:
Имеется два массива (вектора, разницы нет какой контейнер использовать) нужно найти два элемента, которые есть и в первом и во второмКроме...
Необходимо под Linux системой (Ubuntu 17) собрать проект с использованием cmake