Помощь, необходимая для базового ввода и вывода C - PullRequest
0 голосов
/ 28 января 2011

Мне нужно получить два ввода - шестнадцатеричный адрес и количество битов, а затем мне нужно распечатать индекс и смещение адреса.

Таким образом, если входы 20 и 0x0FF10100, выходной сигнал должен быть 0x0FF1 для индекса и 0100 для смещения.

int bits, index, offset, count;
short addr[10], addr2;


printf("# of bits: ");
scanf("%d", &bits);

index = (bits / 4) + 2;
offset = 10 - index;

printf("Integer (in hex): ");
scanf("%hi", addr);

Затем мне нужно вывести индекс (20/4) +2 = 7, что означает первые 7 символов адреса. А остальное в смещении.

Я не мог использовать printf, я пробовал много раз. Но я не мог исправить, я надеюсь, что кто-то может помочь

Спасибо всем.

Для вывода я попытался использовать

while (count < index)
{
    printf("", addr[count], addr[count]);
    count++;
}

Он ничего не печатал ...

тогда я попробовал много вариантов этого, и я получил ошибку. Я не знаю, что использовать для вывода ..

Спасибо

Ответы [ 2 ]

0 голосов
/ 28 января 2011

Всегда проверяйте возвращаемое значение 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]);
0 голосов
/ 28 января 2011

Возможно, я что-то упустил, но ваш вызов printf использует пустую строку вместо строки формата. Вы можете увидеть различные спецификаторы формата здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...