2016-01-13 4 views
-6
#include <stdio.h> 
int main(void) 
{ 

    int mins = 10; 
    int formu = 6 * mins; 

    printf("Input: %x\n", mins); 
    printf("Result: %x\n", formu); 
} 

Какие результаты в следующем:Почему код C возвращает цифры больше 10 в виде букв?

Input: a 
Result: 3c 

Я считаю, что по какой-то причине, один из типов, если не оба, генерируется как «Double» и положить в «Int» вызывает conflict.When меняю либо из «% х» до «мин» или «Formu» я получаю следующее сообщение об ошибке:

error: data argument not used by format string [-Werror,-Wformat-extra-args] 
    printf("Input: %mins\n", mins); 
      ~~~~~~~~~~~~~~~~^
  • почему компилятор, предполагая, что я хочу двойной?
  • Это причина, по которой числа, превышающие 10, приводят к конверсии писем?

Благодаря

+2

Вы спрашиваете, как работает hex? –

+0

Нет, не совсем. Я просто смущен тем, почему он выводит в шестнадцатеричном виде. Извинения, если это слишком очевидно - я довольно новичок в кодировании. – HakBon

+0

Как уже указывали другие, оно выводится в шестнадцатеричном виде, потому что вы попросили его вывести в шестнадцатеричном формате (даже если это не было вашим намерением). –

ответ

1

Вы спрашиваете printf() представлять числа как hexadecimal.

Попробуйте использовать %d или %i вместо %x. Это покажет их как десятичные числа.

2

x в %x является форматом hexadecimal спецификатор и a в шестнадцатеричном 10. Это не имеет ничего общего с двойниками. Если вы хотите напечатать десятичное число с помощью %d:

printf("Input: %d\n", mins); 

printf documentation Смотрите также для получения более подробной информации о спецификаторах формата.

+1

спасибо - я не знал разницу, которую может вызвать буква, следующая за%. – HakBon

+0

И бесстыдная плагин: если вы не хотите беспокоиться о спецификаторах формата, используйте что-то вроде https://github.com/cppformat/cppformat – vitaut

2

Спецификатор формата %x сообщает printf для вывода заданного целочисленного значения в шестнадцатеричном формате.

Если вы хотите, чтобы выход был десятичным, используйте %d.

Кроме того, вам нужно убедиться, что каждому спецификатору формата задан аргумент соответствующего типа. Таким образом, %d, %x и% u require an int , while% f required a двойной`. Использование неверного спецификатора формата приводит к undefined behavior.

Для получения более подробной информации, обратитесь к странице для printf

+0

спасибо - получил его сейчас – HakBon

Смежные вопросы