ANSI C (ISO C90): может ли scanf считывать / принимать неподписанный символ? - PullRequest
15 голосов
/ 09 февраля 2010

Простой вопрос: может ли scanf прочитать / принять "маленькое целое" в беззнаковый символ в ANSI C?

пример кода un_char.c:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    unsigned char character;

    scanf("%hhu", &character);

    return EXIT_SUCCESS;
}

Составлено как:

$ gcc -Wall -ansi -pedantic -o un_char un_char.c
un_char.c: In function ‘main’:
un_char.c:8: warning: ISO C90 does not support the ‘hh’ gnu_scanf length modifier

hh не поддерживается ISO C90. Так какое преобразование scanf можно использовать в этой ситуации?

Ответы [ 2 ]

11 голосов
/ 09 февраля 2010

Нет: C89 (C90) не поддерживает '%hhu' для чтения строки цифр в беззнаковый символ. Это особенность в C99.

Вы должны прочитать целое число без знака ('%u') или короткое число без знака ('%hu'), а затем проверить, что результат соответствует диапазону без знака.

3 голосов
/ 09 февраля 2010

Прочитайте его в unsigned short / int и сделайте некоторую проверку диапазона после, если вам нужно.

...