Что происходит с переменной с плавающей запятой, когда% d используется в printf?

Я пытаюсь выучить C, читая Язык программирования C, 2-е издание . У меня есть некоторый опыт программирования, но не с C.

Я сейчас занимаюсь Глава 1. У меня есть следующий код:


  float f;
  for (f = 0.0; f <= 3; f += 1.1)
      printf("A: %3f B: %6.2f\n", f, f + 0.15);

Он печатает вывод:

A: 0.000000 B:   0.15
A: 1.100000 B:   1.25
A: 2.200000 B:   2.35

Выглядит нормально.


Теперь я изменяю printf следующим образом:

printf("A: %3d B: %6.2f\n", f, f + 0.15);

Новый вывод -

A:   0 B:   0.00
A: -1610612736 B:   0.00
A: -1610612736 B: -625777476808257557292155887552002761191109083510753486844893290688350183831589633800863219712.00

Что здесь происходит? можно было бы ожидать, что float будет преобразован в int, потому что я использовал% d, но этого не произошло. Кроме того, почему значение B также пошло не так? Что случилось с f здесь?

16
задан Suraj Jain 8 January 2018 в 09:05
поделиться