2014-10-20 3 views
-1
float x; 
x = 1.00000; 
printf("1: %d\n", x); 
printf("2: %f", x); 

Этого кодом произвести следующий вывод:различных значений с% D и% F с тем же варом

1: 0 
2: 1.00000 

Почему 1:% d не равен 1, но печатает 0?

+5

Использование '% d' с аргументом с плавающей запятой неверно; поведение не определено. Не делай этого. –

+0

Если вы используете неправильные спецификаторы типов, вы входите в какую-либо страну с неопределенным поведением. Таким образом, вопрос не имеет большого смысла, он зависит от системы и компилятора и может меняться от запуска до запуска. – luk32

+1

Прямой ответ на ваш вопрос, '% d' предназначен для печати целых чисел, а не для плавающих. Поэтому он интерпретирует первую часть 'x' в памяти как целое число, которое бывает' 0'. Внутреннее представление для float длиннее целого. – lurker

ответ

1

Спецификация %d в printf не преобразовывает float в int перед его выдачей. Он просто работает с ним, как с int. Так что вам нужно использовать литье типа:

printf("1: %d\n", (int)x);