Различные вопросы по использованию операторов printf и sprintf.
1. Почему не получается вывод чисел float (%f): вместо числа печатается знак вопроса?
По умолчанию стандарный ввод/вывод урезаный, в нем не поддерживается обработка формата плавайющей точки. Чтобы исправить это, нужно включить полную поддержку обработки printf/sprintf добавлением опции к командной строке линкера: -Wl,-u,vfprintf -lprintf_flt. Например, как это делается в проекте Atmel Studio: откройте свойства проекта, перейдите в раздел AVR/GNU Linker -> Miscellaneous, в поле ввода "Other Linker Flags:" добавьте строку -Wl,-u,vfprintf -lprintf_flt.
Подробнее см. [1].
2. Почему неправильно выводятся 32-битные числа без знака с помощью спецификатора формата %u?
Потому что правильно использовать для таких чиcел спецификатор %lu. Также см. полный набор различных спецификаторов в статье [3].
[Ссылки]
1. AVR Studio + avr-gcc: использование sprintf для чисел float и double. 2. stdio.h: стандартные возможности ввода/вывода. 3. IAR EWB ARM: форматированный вывод printf библиотеки DLIB. 4. Секреты printf. |