sscanf не работает float
- Войдите на сайт для отправки комментариев
Вс, 06/05/2018 - 02:34
Вот уже целый день бьюсь с функцией sscanf пытаясь прочитать значение с плав.точкой.
В результате выполнения приаттаченого кода в терминале получаю 0.00,
Что я делаю не так?
char buf[]="gprmc,5.25"; float x; void setup() { // put your setup code here, to run once: Serial.begin(9600); while (!Serial) {} } void loop() { // put your main code here, to run repeatedly: sscanf(buf,"gprmc,%f",&x); Serial.println(x); while(1); }
А каким спецификаторам формата соответствует строка gprmc?
На ардуино форматированный вывод float не работает. Логично предположить, что и ввод тоже не работает.
На ардуино форматированный вывод float не работает. Логично предположить, что и ввод тоже не работает.
Ну зачем же так категорично?
Вывод:
Ну зачем же так категорично?
:-)
не работает в функции sprintf.
andriano, это нечестно :(
На IDE 1.8.5:
А каким спецификаторам формата соответствует строка gprmc?
Она соответствует сама себе - она есть в формате.
Я не оченьхорошо знаком с sscanf. Подскажите как это работает? Нужно вводить именно эти символы? %[gprmc,] - может быть надо как то так? И вопрос к ТС - что возвращает sscanf? В спецификации написано, что 0 это индикация ошибки преобразования.
Давайте начнем издалека.
Во-первых, Arduino != AVR.
Значит, раз на одних контроллерах Ардуино работает, а на других - нет, надо искать, в чем различие.
А различие в том, что на AVR используется нестандартный 4-байтовый double. А по стандарту С/С++ все промежуточные вычисления производятся именно в double. Поэтому стандартные функции С/С++, которые хотят видеть стандартный double, а вместо этого получают float, офигевают от такой наглости и отказываются работать.
Таким образом, высказывание 5N62V необходимо откорректировать:
На AVR форматированный вывод float не работает.
Как заставить работать - вопрос отдельный, но главное - понимать причину того, что происходит.
Спасибо за разяснение, я знал что double с подвыподвертом на arduino, но не подумал что изза этого так косячит стандартная сишная функция.
Интересно как можно заставить ее работать правильно?
вводить число как строку, а потом использовать strtod()