Что вернёт atof

ArgusSW
Offline
Зарегистрирован: 23.09.2020

Пара вопросов .

1. какое значение вернёт функция ATOF если входной string содержит абракадабру? 

2. Работает ли конструкция IF если сравниваемые данные разных типов (одно int другое float)?

float a=1;

int b=2;

if (a > b) {.........

 

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ArgusSW пишет:

Пара вопросов .

Один ответ: запустите, попробуйте и расскажите нам - будем знать.

b707
Offline
Зарегистрирован: 26.05.2017

ArgusSW, и не лень вам было набирать сообщение? - лучше бы программу в Ардуино набрали - сразу бы и узнали ответ.

Да и полезнее всегда самому разобраться. чем у других спрашивать.

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

На уроке сидел, вопрос задали, похоже ))))

sadman41
Offline
Зарегистрирован: 19.10.2016

Google "atof" -> http://www.cplusplus.com/reference/cstdlib/atof/

Return Value

On success, the function returns the ...

ArgusSW
Offline
Зарегистрирован: 23.09.2020

b707 пишет:

ArgusSW, и не лень вам было набирать сообщение? - лучше бы программу в Ардуино набрали - сразу бы и узнали ответ.

Не трудно догадаться что наверное нет сейчас такой возможности

ArgusSW
Offline
Зарегистрирован: 23.09.2020

If the first sequence of non-whitespace characters in str does not form a valid floating-point number as just defined, or if no such sequence exists because either str is empty or contains only whitespace characters, no conversion is performed and the function returns 0.0.

 

Я так понимаю что эта строка содержит ответ. Но порождает другой. Надо спарсить строку и извлечь из неё параметр, который может принимать и нулевое значение. Как быть? как понять что фунция смогла сконвертить и вернула значение а не 0 в смысле пусто?

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ArgusSW пишет:

Не трудно догадаться что наверное нет сейчас такой возможности

Если у Вас сейчас нет возможности запустить и проверить, значит нет и возможности его (atof) использовать. Когда появится, запустите, проверите и расскажете нам.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ArgusSW пишет:

Но порождает другой. Надо спарсить строку и извлечь из неё параметр, который может принимать и нулевое значение. Как быть? как понять что фунция смогла сконвертить и вернула значение а не 0 в смысле пусто?

Вот, правда, не верю, что Вы не можете решить этот вопрос просто подумав несколько минут. Подумайте и решите. Чего сразу постить, не успел ещё вопрос возникнуть?

ArgusSW
Offline
Зарегистрирован: 23.09.2020

ЕвгенийП пишет:

ArgusSW пишет:

Не трудно догадаться что наверное нет сейчас такой возможности

Если у Вас сейчас нет возможности запустить и проверить, значит нет и возможности его (atof) использовать. Когда появится, запустите, проверите и расскажете нам.

А вам вот не лень воду лить? Или скучно?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Мне? Нет не лень. Мне лень идти стелаж варить, а так вроде и делом занят - не иду.

ArgusSW
Offline
Зарегистрирован: 23.09.2020

я так и думал. потрындеть. Бывает. :)

b707
Offline
Зарегистрирован: 26.05.2017

ArgusSW пишет:

А вам вот не лень воду лить? Или скучно?

а вам не лень в форуме мусорить?

многие новички почему-то считают, что форум - это замена учебнику или гуглю. типа если лень самому в книжке искать - напиши на форум, знатоки сразу ответ на блюдечке принесут.

У нас - не так. У нас таких новичков гнобят.

ArgusSW
Offline
Зарегистрирован: 23.09.2020

Прошу прощения - но этот раздел вроде как "песочница" называется. Я пересмотрел с десяток сайтов и мануалов и не нашел ответа. Подумал что помогут знающие но походу ошибся. :)

b707
Offline
Зарегистрирован: 26.05.2017

ArgusSW пишет:

Я пересмотрел с десяток сайтов и мануалов и не нашел ответа.

пересмотрел десяток сайтов, вместо того чтоб запустить 2 строки кода? - или "десяток сайтов" - это только фигура речи, а на самом деле вы и одного не дочитали?

Возможно, вы не нашли ответа, потому что понятие "абракадабра" не имеет четкого определения и поэтому в мануалах про это ничего нет. Поэтому самый простой метод - это взять свои примеры "абракадабры" и скормить их реальному коду.

а уж если по результатам возникнут вопросы - вот тогда приходите. Будем разбираться. Но только с примером кода и абракадабры, а иначе разговора не получится, вот как сейчас.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ArgusSW пишет:

Я пересмотрел с десяток сайтов и мануалов и не нашел ответа.

Это про atof? Или про "другой вопрос"? Если про atof, то Вы лжёте - достаточно прочитать её описание, которое есть на любом заборе (ну или запустить и посмотреть), а уж в десятках "сайтов и мануалов" ответа не найти невозможно. А если про "другой вопрос", то тем более лжёте - он у Вас только что возник, когда бы Вы смотрели десятки "сайтов и мануалов"?

В общем, в любом случае - это "типичный случай так называемого вранья".

ArgusSW пишет:

Подумал что помогут знающие

Помочь можно только тому, кто сам делает. Начните делать самостоятельно и отношение к Вам изменится.

Я ведь Вам дал очень дельный совет - просто запустить и посмотреть, но Вы решили, что это не барское дело. Ну, извините, тарелочки с голубыми каёмочками закончились :-(

ArgusSW пишет:

походу ошибся. :)

Таки, да.

ArgusSW
Offline
Зарегистрирован: 23.09.2020

Не на чем запустить. всем спасибо.

b707
Offline
Зарегистрирован: 26.05.2017

ArgusSW пишет:

Не на чем запустить. всем спасибо.

ардуины нет, линукса нет, С в винде тоже нет?

симуляторы в гугле все забанили?

- тогда зачем вам это знание?

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

ArgusSW пишет:

If the first sequence of non-whitespace characters in str does not form a valid floating-point number as just defined, or if no such sequence exists because either str is empty or contains only whitespace characters, no conversion is performed and the function returns 0.0.

По новым правилам If str does not point to a valid C-string, or if the converted value would be out of the range of values representable by a double, it causes undefined behavior.

Цитата:
 Надо спарсить строку и извлечь из неё параметр, который может принимать и нулевое значение. Как быть? как понять что фунция смогла сконвертить и вернула значение а не 0 в смысле пусто?

Написать свой аналог atof  или анализировать строку перед тем как передавать ее на конвертацию. 

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Ну был не прав. Не на уроке - домашнее задание, похоже, всё-таки. 

ArgusSW
Offline
Зарегистрирован: 23.09.2020

уже дважды неправ. :)

Блок GSM управления отоплением дачи. Изначально написал проверку на фиксированные команды,потом  захотелось расширить функционал и задумался над парсингом строки из GSM модуля. Год назад попытался сделать - не получилось, время поджимало поставил как есть. Сейчас опять холода на носу надо резко доделать :)

sadman41
Offline
Зарегистрирован: 19.10.2016

Полагаю, что прежде конвертации надо проверить строку на наличие символов, отличных от цифр и десятичной точки.

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

sadman41 пишет:
Полагаю, что прежде конвертации надо проверить строку на наличие символов, отличных от цифр и десятичной точки.

Ага, и точка должна быть максимум одна.

ArgusSW
Offline
Зарегистрирован: 23.09.2020

команда будет что то типа tempa20 - где temp это команда, a-b-c-d номера каналов, в конце целевая температура. в принципе если соблюдать формат команды всё и так будет работать. мне интересно что произойдёт если придёт некорректная смс. Так сказать защита от дурака. 

sadman41
Offline
Зарегистрирован: 19.10.2016

Взорвется котел, что ж ещё может быть.

ArgusSW
Offline
Зарегистрирован: 23.09.2020

исключено. Термозащита и механический регулятор ещё две ступени. Максимум что будет - это отопление будет наяривать впустую, либо не нагреет к приезду. И то и другое не страшно, но нежелательно.

b707
Offline
Зарегистрирован: 26.05.2017

Главный вопрос - нафига для такого парсинга atof?

ArgusSW
Offline
Зарегистрирован: 23.09.2020
Думаю пока вот так сделать:    
if (inputString.indexOf("SET") >-1) { 
     termotmp=string.substring(4);
     x = atof(termotmp);
      nagrev = true;
      if (x >-40 && x<40) {
      setprint (settemp);
      }
 
PS вот чего на выходе. что не так?
 
Termal_Control_Worked:94:23: error: cannot convert 'String' to 'const char*' for argument '1' to 'double atof(const char*)'
      x = atof(termotmp);
                   ^
cannot convert 'String' to 'const char*' for argument '1' to 'double atof(const char*)'

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ArgusSW пишет:

Думаю пока вот так сделать:    
if (inputString.indexOf("SET") >-1) { 
     termotmp=string.substring(4);
     x = atof(termotemp);
      nagrev = true;
      if (x >-40 && x<40) {
      setprint (settemp);
      }

1. Научитесь правильно вставлять код, чтобы были номера строк. В таком виде работать невозможно.

2. Вставляйте код целиком - здесь у Вас совершенно неясно какие типы имеют те или иные данные.

3. Напрасно Вы так думаете. В строке №ХЗ Вы запоминаете результат substring, а в строке №ХЗ пихаете этот результат atof'у. А теперь ответьте, какой тип данных возвращает substring и какой требуется atof'у?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ArgusSW пишет:

 
PS вот чего на выходе. что не так?
 
Termal_Control_Worked:94:23: error: cannot convert 'String' to 'const char*' for argument '1' to 'double atof(const char*)'
      x = atof(termotmp);
                   ^
cannot convert 'String' to 'const char*' for argument '1' to 'double atof(const char*)'

Оно самое. См. замечание №3 из моего предыдущего поста.

И ещё раз перечитайте остальные два замечания. С этого момента я не комментирую неправильно вставленный код и не пытаюсь догадываться какие там типы.

ArgusSW
Offline
Зарегистрирован: 23.09.2020

Спасибо ЕвгенийП, очень содержательно, помогло несказанно. Как на форуме линуксоидов побывал. :)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Если Вам что-то непонятно из объяснений, можно задать уточняющий вопрос, а можно съязвить. Вы выбрали второе - удачи Вам и попутного ветра! Если передумаете, обращайтесь, только не забываем про правильную вставку кода.

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Брат, если ты не понимаешь, что написано в сообщении #27 и в п.3 сообщения #28, то тебе ещё рано писать парсинг строки. Ты его не напишешь ни с какими подсказками, т.к. не знаешь самых базовых вещей на которых такие вещи строятся. Не веришь - можешь поспорить и послать меня "на", только ситуация от этого не улучшится, а она такая, как я описал.

Так что вариантов у тебя три:

  1. изучить язык (начни с "Кернигана и Ритчи") и въехать в такие вещи как "типы данных" и работа со строками. Изучать до тех пор, пока упомянутые сообщения не станут очевидными;
  2. ждать здесь, авось кто-нибудь смилостивится и просто напишет всё за тебя, Христа ради;
  3. заказать нужный парсер в коммерческом разделе.

Я бы выбрал первый вариант, а ты - это тебе решать.

ArgusSW
Offline
Зарегистрирован: 23.09.2020

Да работает уже всё, сам разобрался. Удачи.

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

А чего тогда мозг выносил? Троллоло? 

b707
Offline
Зарегистрирован: 26.05.2017

Ворота пишет:

А чего тогда мозг выносил? Троллоло? 

да врет небось.

ArgusSW
Offline
Зарегистрирован: 23.09.2020

1

b707
Offline
Зарегистрирован: 26.05.2017

ArgusSW пишет:

одной строкой написать что перед atof надо преобразовать переменную string в char. 

дорогой, это первое, что написано в любом описании этой команды. Чуть выше вы били себя в грудь, что изучили "десяток мануалов".... ну понятно, да? :)

 

 

ArgusSW
Offline
Зарегистрирован: 23.09.2020

Читал, но... После PHP пока трудновато иметь ввиду что здесь два способа представления строк. В итоге читаешь мануал к одному языку а в голове понятия от другого.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ArgusSW пишет:

одной строкой написать что перед atof надо преобразовать переменную string в char. 

Знаете, я всегда пишу (изначально) с уважением к собеседнику. Я никогда не говорю как мартышке "делай раз, делай два, ...", а всегда даю наводящий намёк, в данном случае, таким намёком был вопрос "какой тип данных возвращает substring и какой требуется atof'у?" в расчёте на то, что человек умён и мотивирован, и дальше сделает сам. Если Вы предпочитаете, чтобы с Вами общались не как "коллега с коллегой", а как "сержант с рядовым", то это не ко мне.

Кстати, в данном случае намёк сработал, Вы самостоятельно допёрли что там с типами, и я рад этому. Только вот вместо благодарности я увидел от Вас обсёр и ц.у. как надо было писать. Впредь подумаю, помогать Вам или ну его нафиг.

P.S. Прочитав Ваш ответ, могу добавить - уже подумал :-)

ArgusSW
Offline
Зарегистрирован: 23.09.2020

Евгений, жаль что вы не стали вчера варить стеллаж. :)

b707
Offline
Зарегистрирован: 26.05.2017

ArgusSW пишет:

Евгений, жаль что вы не стали вчера варить стеллаж. :)

Аргус, не надоело огрызаться то? Вы с чем-то не согласны? Считаете, что все обязаны по первому вашему кивку бежать к вам с учебниками, обучающими материалами, готовым кодом?

Вам не кажется, что если это хобби - Вы сами должны приложить усилия, что-то почитать. попробовать написать код? А если вам просто нужен результат - пойдите и купите его в магазине.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ArgusSW пишет:

Евгений, жаль что вы не стали вчера варить стеллаж. :)

Ничего, я займусь этим в тот момент, когда Вы снова прибежите на форум с просьбой о помощи. Самое время будет стелажом заняться :-)

ArgusSW
Offline
Зарегистрирован: 23.09.2020

удалите топик как не содержащий ничего полезного и успокойтесь. Всем хорошего дня. :)

b707
Offline
Зарегистрирован: 26.05.2017

ArgusSW пишет:

удалите топик как не содержащий ничего полезного и успокойтесь. Всем хорошего дня. :)

понятно :) ТС ушел с гордо поднятой головой, никто не понял его тонкую душу :)

никаких выводов не сделано.

ArgusSW
Offline
Зарегистрирован: 23.09.2020

сделано. вы их сразу и подсказали во втором вашем посте. Действительно проще разобраться самому :) 

А топик действительно бесполезный вышел. Не согласны?

b707
Offline
Зарегистрирован: 26.05.2017

ArgusSW пишет:

сделано. вы их сразу и подсказали во втором вашем посте. Действительно проще разобраться самому :)

это хорошо, значит как раз есть польза от топика