0 / 0 / 0
Регистрация: 02.03.2016
Сообщений: 90
|
||||||
1 | ||||||
Ошибка в Borlan C++ Builder c "не допустимым значением с плавающей точкой"19.05.2017, 14:29. Показов 1730. Ответов 10
Метки нет (Все метки)
Приветствую всех!
Меня попросили написать не большую программу в Borland C++ Builder, я почти закончил, но у меня возникла одна проблема. Вычисление мощности по формуле P=I2R. Ниже приведен фрагмент кода, вычисления по этой формуле у меня должны производиться в строчках 20-33, в теле оператора if представленых ниже и выше предложен практически аналогичный расчет с небольшим отличием отличием но они работают без проблем, а когда возникает условие выполнения тела if строчек 21-33 то появляется сообщение об ошибке представленое на рис.1, а после нажатия на кнопку ok этого сообщения курсор останавливается на строчке вызова этой функции рис.2. Вчем моя ошибка не могу понять.
0
|
19.05.2017, 14:29 | |
Ответы с готовыми решениями:
10
Ошибка -is not a valid integer value (не является допустимым целым значением), не понимаю в чем ошибка Ошибка операции с плавающей точкой Ошибка с плавающей точкой в MathCAD 14 Ошибка: выражение должно быть допустимым для изменения левосторонним значением Ошибка: Выражение должно быть допустимым для изменения левосторонним значением |
0 / 0 / 0
Регистрация: 02.03.2016
Сообщений: 90
|
|
19.05.2017, 14:32 [ТС] | 2 |
Сразу еще хочу спросить, а в Borland C++ Buildere можно в окне с кодом программы включить нумерацию строк?
0
|
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
|
|
19.05.2017, 22:19 | 3 |
grey-vsm, скорее всего ошибка из-за того, что в каком то поле ввода ничего не введено. Не может программа преобразовать пустую строку в число с плавающей запятой. Кстати, в поле ввода надо использовать запятую при разделении целой и дробной частей.
0
|
144 / 88 / 23
Регистрация: 31.08.2016
Сообщений: 775
|
|
20.05.2017, 08:20 | 4 |
0
|
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
|
|
20.05.2017, 09:22 | 5 |
Это конечно правильно, но в 99,99% никто не меняет эту настройку в русскоязычной винде и по-умолчанию используется запятая.
0
|
1487 / 1414 / 240
Регистрация: 19.02.2010
Сообщений: 3,916
|
|
20.05.2017, 10:01 | 6 |
grey-vsm, Если в форме в поля ввода данных какие-то переменные (с пплавающей точкой) занесены текстом по умолчанию - то уберите эти установки из формы и делайте их непосредственно в конструкторе, присваиванием. Таким способом, который умеет автоматически, самостоятельно обрабатывать установленный в винде разделитель.
Т.е., например, Form2->Edit1->Text=AnsiString(0.01f); и так далее для прочих строк ввода. И если на компе будет стоять запятая - то Сишный (да и в любых языках программирования тоже) разделитель в виде точки будет при запуске проги автоматически изменён на запятую. В общем, АнсиСтринг как в своём конструкторе от плавучей переменной, так и в методе ToDouble (его можно юзать вместо вызова функции StrToFloat) с системными настройками работать умеет, поэтому надо все операции проводить через него. Ну и перед конвертированием проверяйте поле ввода на непустоту. АнсиСтринговскими методами IsEmpty() или Length()==0. Но проще обернуть строку конвертирования в try-блок, затем ругаясь в кэтче на недопустимое значение. Что-то типа такого: Код
float Val; try { Val=Edit->Text.ToDouble(); } catch (...) { Application->MessageBox("Недопустимое значение","Ошибка"); ActiveControl=Edit; return; }
0
|
0 / 0 / 0
Регистрация: 02.03.2016
Сообщений: 90
|
|
20.05.2017, 19:15 [ТС] | 7 |
это ваше предположение ошибочно. Ниже приведена картинка запуска exe файла этой программы на которой видно, что в нужные поля введены данные, но сообщение об ошибке все равно появляется.
0
|
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
|
|
20.05.2017, 20:49 | 9 |
grey-vsm, выполните программу по шагам и посмотрите какая строка вызывает ошибку. Сообщение об ошибке ясно говорит, что программа не может преобразовать пустую строку в число.
Почему нельзя нормально назвать поля ввода и чекбоксы? Что такое Edit1 и Edit2 ? Телепатирую, что надо вместо Edit2 написать Edit3 .
0
|
0 / 0 / 0
Регистрация: 02.03.2016
Сообщений: 90
|
|
21.05.2017, 08:50 [ТС] | 10 |
d7d1cd, спасибо за помощь, ошибка действительно оказалась в номере компонента Edit, я спутал Edit2 и Edit3.
Добавлено через 4 минуты А Почтальону могу ответить, что в данном случае (приведеном на картинке) параметр напряжения просто не используется, для расчета мощности применяется формула "P=I2R", и поэтому поле ввода напряжения нет на экране.
0
|
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
|
|
21.05.2017, 12:19 | 11 |
grey-vsm, совет Вам: давайте осмысленные имена переменным и компонентам. Я Вам сразу сказал, что в каком-то поле ввода ничего не введено и, согласно приведенного текста программы, был прав.
0
|
21.05.2017, 12:19 | |
21.05.2017, 12:19 | |
Помогаю со студенческими работами здесь
11
Ошибка: выражение должно быть допустимым для изменения левосторонним значением Ошибка: выражение должно быть допустимым для изменения левосторонним значением Ошибка: Выражение должно быть допустимым для изменения левосторонним значением ошибка при вычислении с плавающей точкой Освещение. ошибка операции с плавающей точкой Ошибка над числом с плавающей точкой Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |