Всегда проверяйте возвращаемое значение scanf
, если вы собираетесь использовать вход; он вернет количество элементов, которые он успешно отсканировал. Если вы игнорируете возвращаемое значение, вы рискуете попытаться прочитать неопределенные значения, что означает, что ваша программа имеет неопределенное поведение.
Кроме того, при втором вызове scanf
вы не запрашиваете шестнадцатеричное целое число, вы запрашиваете короткое целое число (h
означает короткое, а i
означает целое). Если вы хотите отсканировать шестнадцатеричное короткое целое число, вам нужно использовать hx
, но это также означает, что вам нужно предоставить адрес unsigned short
, а не просто short
.
int bits, index, offset, count;
unsigned short addr[10], addr2;
printf("# of bits: ");
if (scanf("%d", &bits) != 1)
{
// could not scan
// handle scan error here. Exit, or try again, etc.
}
index = (bits / 4) + 2;
offset = 10 - index;
printf("Integer (in hex): ");
if (scanf("%hx", addr) != 1)
{
// could not scan
// do whatever makes sense on scan failure.
}
Если вы читаете последовательные элементы массива addr
, вам может потребоваться следующее:
printf("Integer (in hex): ");
if (scanf("%hx", &addr[count]) != 1)
{
// could not scan
// do whatever makes sense on scan failure.
}
Наконец, относительно использования printf
: первый аргумент printf
говорит ему, как печатать предоставленные данные. Вы дали ему пустую строку, которая означает, что printf
не сказано ничего печатать. Возможно, вы ищете что-то вроде этого:
printf("%d: %hx", count, addr[count]);