2015-10-14 2 views
-1

Я пытаюсь запросить у пользователя ввод, чтобы этот ввод был установлен как символ без знака, а затем распечатал его. Например, вход спросит меня «Ввод x:», и я вставляю 0xABCD в качестве входа. Мне нужно распечатать «0xABCD».Как сканировать и печатать символ без знака в C?

Вот что я до сих пор:

unsigned char x; 
printf("Input x:"); 
scanf("%s, &x); 

printf("%u", x); 

Это дает мне 0 вместо 0xABCD.

Что я делаю неправильно?

+1

Шар - всего лишь один символ, вам нужен массив символов. –

+0

Уверен, что 16-битное значение вписывается в 'unsigned char'? – Downvoter

+0

Какой компилятор вы используете? Наберите максимальный уровень предупреждения и прочитайте все предупреждения. –

ответ

0

В коде

scanf("%s, &x); 

вызывает неопределенное поведение. x имеет тип char, и вы не можете использовать %s для сканирования значения.

Вам нужно определить массив char, по крайней мере, чтобы удерживать ожидаемый вход.

Если вы хотите иметь второй подход, вы можете сделать что-то вроде

  • отсканировать ввод как (без знака) целое число, используя %x
  • печать такой же, используя %#X спецификатор формата.

See it live

0

Строка представляет собой массив символов, прерываемых '\0'. Вы читаете строку в один символ, что является неопределенным поведением.

Ваш код должен действительно выглядеть примерно так:

unsigned char x[64]; 
printf("Input x:"); 
scanf("%63s, x); /* use the size of buffer to prevent buffer overflows */ 

printf("%s", x); 
1

Вы должны использовать "%hhu" в качестве спецификатора формата для считывания unsigned char. См. Таблицу по адресу http://en.cppreference.com/w/c/io/fscanf.

unsigned char x; 
printf("Input x:"); 
scanf("%hhu", &x); 

Обратите внимание, что если вы используете этот спецификатор формата, вход должен быть числом. Это не может быть персонаж. 65 будет действительным, но A не будет.

Приходит к вашей проблеме, желая использовать 0xABCD в качестве входных данных, это значение слишком велико, чтобы вписаться в unsigned char. Вы можете использовать:

unsigned x; 
printf("Input x:"); 
scanf("%x", &x); 

Чтобы напечатать это число, как 0xABCD, вы можете использовать:

printf("0x%X\n", x); 

Если вы не возражаете число печатается в 0xabcd, вы можете использовать:

printf("%#x\n", x); 
+0

'% d' или'% u' могут быть использованы? – ameyCU

+1

@ameyCU, '% u' прав, я думаю. –

+1

Вы правы, но я не думаю, что это то, что OP намеревается сделать. –

0

В любом случае «0xABCD» нельзя рассматривать как «символ». Символ может хранить 8-битное значение, поэтому от 0 до 255 (если без знака), а заданное число 0xABCD равно 43981.

Вы можете прочитать это как строку или прочитать ее как шестнадцатеричное значение (которое должно быть без знака). В этом случае пример:

unsigned int x; 
printf("Number: "); 
scanf("%x", &x); 
printf("%d/%X\n", x, x); 

даст:

Number: 0xABCD 
43981/ABCD 

Если рассматривать как строку, которую вы должны относиться к нему другим способом (sscanf ...).

0

нет эквивалента символов, вместо этого используйте int.

int main(){ 

    unsigned int x; 
    printf("Input x:"); 
    scanf("%x", &x); 

    printf("\n%d (%#x)\n", x); 
} 
Смежные вопросы