Логично, мне нужно было сначала проверить, а потом говорить. В гцц (для ПК) строка printf("t=%i.%u\xdfC",temp,temp%1); вообще не компилится если temp имеет тип флоат (как говорит компилятор, во-первых, потому что оператор % не применяется к типам флоат и дабл). Могу предположить что изврат для того чтобы использовать более легковесную sprintf без флоат, но мне это решение также кажется корявым.ARV писал(а):если temp представлена дробным числом, то вообще непонятно, к чему изврат: можно использовать спецификатор %f и выводить сразу и целую и дробную части.
Программирование AVR на C. Мелкие вопросы
- Сообщения: 459
- Зарегистрирован: Вс июн 01, 2008 12:16:38
- Реклама
- Сообщения: 87
- Зарегистрирован: Ср авг 26, 2009 15:59:39
Для такой задачи можно собственную функцию написать, что-нибудь типа:
Код: Выделить всё
void formatTemp(char *buf, float temp) {
int temp10 = temp*10; //оставляем 1 знак после точки
int i;
for(i = 1000; i > 1; i /= 10) { //выводим первые три разряда
char c = temp10/i + '0';
*(buf++) = c;
temp10 %= i;
}
*(buf++) = '.';
*(buf++) = temp10 + '0';
*buf = 0;
}
