Правильно использовать спецификатор преобразования n - PullRequest
4 голосов
/ 22 сентября 2019

Когда я запускаю приведенную ниже программу с вводом 1X, она печатает 1 2, но когда ввод 0X, она печатает 0 32765 вместо 0 2.Как получилось?

#include <stdio.h>

int main(void)
{
    unsigned int x;
    int charCount, matchCount;

    matchCount = scanf("%xX%n", &x, &charCount);
    if (matchCount == 1) {
        printf("%u %d\n", x, charCount);
    }
    return 0;
}

1 Ответ

3 голосов
/ 22 сентября 2019

Спецификатор scanf %x читает шестнадцатеричное целое число, которое (и это ключевая точка) , необязательно, перед 0x или 0X !(См. здесь .)

Ваш второй пример не дает фактического значения x (или, возможно, дает ноль для пустого ввода после 0x)!Попробуйте использовать, скажем, 1F и 0F в качестве входных тестов.

PS: значение 32765 выглядит подозрительно как телефонное преобразование из -1.

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