Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 18.05.2020
Сообщений: 54

Ошибка преобразования пустого содержимого Edit в int. Не указывается место ошибки

07.02.2021, 13:47. Показов 2001. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Среда разработки RAD Studio 10.4.
Допустим у меня на форме есть поле Edit1, содержимое которого в какой-то момент программа пытается преобразовать в int для вычислений.
C++
1
int a = StrToInt(Edit1->Text);
Если поле в этот момент пустое, то у меня выскакивает вот такое сообщение об ошибке:
Edit1 is not a valid integer value.
Я программу запускаю на исполнение из самой среды разработки с включенными опциями "Link with Dynamic RTL" и "Link with runtime packages". В более ранних версиях C++ Builder'а при такой ошибке у меня подсвечивалась строка в коде, где осуществлялось преобразование, приводящее к ошибке. Сейчас же если код большой - сразу и не поймешь где эта ошибка возникает. Можно ли как-то настроить С++ Builder, чтобы он все таки показывал место ошибки в коде?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.02.2021, 13:47
Ответы с готовыми решениями:

Ошибка INSERT , в попытка вставить в поле тип INT пустого значения
Обновился на свою голову... Ошибка INSERT , в попытка вставить в поле тип INT пустого значения... Само собой раньше все работало,...

Ошибка преобразования данных из DropDownList в int
Здравствуйте! Пытаюсь извлечь данные из объекта DropDownList и преобразовать их в тип int следующим образом: int...

Ошибка преобразования значения NumericUpDown в int
Компилятор мне пишет, что я неправильно переобразовал integer в string. Но я, вроде, правильно это сделал. Где ошибка? private void...

9
Модератор
 Аватар для D1973
9926 / 6463 / 2457
Регистрация: 21.01.2014
Сообщений: 27,416
Записей в блоге: 3
07.02.2021, 14:07
Цитата Сообщение от GenriF Посмотреть сообщение
Можно ли как-то настроить С++ Builder
Вы меня простите, но при чем тут настройка билдера? Вы сделали программу, программа пошла в народ, но Вы не предусмотрели реакцию на неверный ввод/отсутствие ввода... Кто тут дурак: Билдер или программист? Можно ведь просто не делать таких косяков...
1. Не доверяйте пользователю что-то вводить руками без крайней на то необходимости. Только выбирать! Вот зачем Вам нужен компонент TEdit для ввода целого числа? Ведь с этим отлично справляется компонент TSpinEdit - он для этого и создан, чтобы пользователь не мог ввести ничего кроме чисел, причем, если числа должны быть ограничены каким-либо диапазоном (например, от 0 до 10), то этот компонент позволяет установить ограничение на ввод, что избавит от дополнительной проверки...
2. Но если используете обычный TEdit - будьте готовы к тому, что пользователь введет что-нибудь не то, слово матерное, к примеру, или вот, как у Вас, совсем ничего не введет... И тогда Вас спасет только использование других функций преобразования строки в число, а именно
StrToIntDef()
TryStrToInt()
0
0 / 0 / 0
Регистрация: 18.05.2020
Сообщений: 54
07.02.2021, 14:19  [ТС]
Цитата Сообщение от D1973 Посмотреть сообщение
Вы сделали программу, программа пошла в народ, но Вы не предусмотрели реакцию на неверный ввод/отсутствие ввода
Программа еще никуда не пошла, она на стадии разработки. Я же говорю - запускаю ее в режиме отладки. А писать код сразу без ошибок - такое думаю не под силу никому. Не говоря уж обо мне - я по сути пишу небольшие программки для своих нужд по основному роду деятельности. Так вот если бы у меня было 10 тысяч строк кода - как же найти в какой момент происходит неверное считывание данных из Edit? И если раньше Builder просто указывал эту строку кода, где произошла ошибка, то сейчас не показывает. Предполагаю, что где-то есть соответствующая настройка или это фишка их нового компилятора.
0
Модератор
 Аватар для D1973
9926 / 6463 / 2457
Регистрация: 21.01.2014
Сообщений: 27,416
Записей в блоге: 3
07.02.2021, 14:45
Цитата Сообщение от GenriF Посмотреть сообщение
Программа еще никуда не пошла...
Это я Вам образно пытался обрисовать ситуацию, чтобы донести до сознания тот факт, что код здесь не при чем, так же, как и запуск в режиме отладки. Но видимо - слишком образно, потому как не дошло... У Вас не синтаксическая ошибка, а ошибка времени выполнения, которая никак не ловится компилятором! При чем тут код? При чем тут настройки и режим отладки?
Цитата Сообщение от GenriF Посмотреть сообщение
И если раньше Builder просто указывал эту строку кода, где произошла ошибка, то сейчас не показывает
Не сочиняйте: не было никогда такого для ошибок времени выполнения...
0
0 / 0 / 0
Регистрация: 18.05.2020
Сообщений: 54
07.02.2021, 15:23  [ТС]
Цитата Сообщение от D1973 Посмотреть сообщение
Не сочиняйте: не было никогда такого для ошибок времени выполнения.
Как это не было? Может вы просто не работали в более ранних Builder'ах. Вообще-то это элементарная вещь. Среда разработки для этого и нужна в том числе, чтобы указывать на ошибки. И если в новой версии эту функцию выпилили - это представляется крайней глупостью. Не могу допустить мысль, что разработчики могли такую глупость внедрить в Builder. Вероятно взамен предложен какой-то новый инструментарий, только я не знаю какой, так как вообще-то не являюсь по сути программистом и не отслеживаю все эти вещи.
0
0 / 0 / 0
Регистрация: 18.05.2020
Сообщений: 54
07.02.2021, 15:42  [ТС]
Частично понял в чем проблема. Я просто запускал программу не в режиме отладки. По привычке нажимал на кнопку запуска с иконкой в виде большого зеленого треугольника, а сейчас почитал всплывающую подсказку к нему:
Run Without Debugging (Shift+Ctrl+F9)

А рядом расположена другая кнопка с другой иконкой и подсказкой:
Run (F9)

Вроде бы раньше кнопка с большим зеленым треугольником как раз соответствовала варианту запуска в режиме отладки. Вобщем сейчас запустил по F9 и получил вот такое сообщение об ошибке (картинка 1).

Вот в таком виде вроде бы раньше и давались сообщения об ошибках (говорю везде "вроде", потому что вернулся к программированию после долгого перерыва, уже не помню многое). Но если раньше по нажатию кнопки "Break" как раз и подсвечивалась строчка кода, где произошла ошибка, то сейчас выбрасывает на вкладку CPU и тут совершенно ничего не понятно (картинка 2).

Можно ли как-то отсюда понять в какой строчке кода произошла ошибка?
Миниатюры
Ошибка преобразования пустого содержимого Edit в int. Не указывается место ошибки   Ошибка преобразования пустого содержимого Edit в int. Не указывается место ошибки  
0
Модератор
 Аватар для D1973
9926 / 6463 / 2457
Регистрация: 21.01.2014
Сообщений: 27,416
Записей в блоге: 3
07.02.2021, 16:23

Не по теме:

Цитата Сообщение от GenriF Посмотреть сообщение
Может вы просто не работали в более ранних Builder'ах.
Может быть, смотря что для Вас "ранний" Билдер... Я начинал с 5-го... А в Дельфи (который брат-близнец Билдера) - с первой версии, которая под Windows 3.1 была...


Вот хоть убейте, но мне все таки до сих пор не понятно, что Вам даст строчка кода, на которой произошла ошибка? Как Вы в своем коде исправите ошибку пользователя, который не ввел в Эдит данные?
0
0 / 0 / 0
Регистрация: 18.05.2020
Сообщений: 54
07.02.2021, 17:36  [ТС]
Цитата Сообщение от D1973 Посмотреть сообщение
Вот хоть убейте, но мне все таки до сих пор не понятно, что Вам даст строчка кода, на которой произошла ошибка? Как Вы в своем коде исправите ошибку пользователя, который не ввел в Эдит данные?
Мне это даст возможность исправить ошибку, то есть проконтролировать возможность обработки некорректных данных. Это же очевидно.

Так а если по сути, возможности выявлять конкретные места кода, где возникают такие ошибки, сейчас нет? То есть программисту нужно писать идеальный код с самого начала?
0
Модератор
 Аватар для D1973
9926 / 6463 / 2457
Регистрация: 21.01.2014
Сообщений: 27,416
Записей в блоге: 3
08.02.2021, 05:55
Цитата Сообщение от GenriF Посмотреть сообщение
возможности выявлять конкретные места кода, где возникают такие ошибки, сейчас нет?
Не знаю, откуда Вы такую возможность взяли... Сейчас специально смоделировал ситуацию на C++ Builder 6 - да, окна CPU не появилось, потому как опция такая не была установлена, вместо него выкинуло в главный файл проекта... Ну и чем мне лучше стало от этого?
Цитата Сообщение от GenriF Посмотреть сообщение
Если поле в этот момент пустое, то у меня выскакивает вот такое сообщение об ошибке:
Edit1 is not a valid integer value.
и, кстати, если поле, как Вы пишете, пустое - ошибка будет выглядеть вот так:



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

Не по теме:

Цитата Сообщение от GenriF Посмотреть сообщение
Это же очевидно.
Нет, абсолютно не очевидно... Очевидно только, что это бесперспективный разговор... Отпишусь от темы...

0
0 / 0 / 0
Регистрация: 18.05.2020
Сообщений: 54
08.02.2021, 11:51  [ТС]
Цитата Сообщение от D1973 Посмотреть сообщение
Сейчас специально смоделировал ситуацию на C++ Builder 6 - да, окна CPU не появилось, потому как опция такая не была установлена, вместо него выкинуло в главный файл проекта... Ну и чем мне лучше стало от этого?
Не знаю как вам, а мне бы точно лучше стало, потому что я бы знал в каком именно месте программы у меня произошла некорректная обработка данных, что бы устранить эту ошибку. По-моему это гораздо удобнее, когда среда разработки конкретно указывает на строчку кода с ошибкой, чем если приходится самому гадать где же она происходит.

Кстати, отображение окна CPU у меня тоже не установлено, но оно почему-то отображается.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.02.2021, 11:51
Помогаю со студенческими работами здесь

Ошибка пустого поля Edit типа double ("" is not valid floating point value.)
Здравствуйте. У меня такой вопрос. У меня в программе есть движущейся объект, скорость вращения которого считывается из Edit, которое...

Ошибка преобразования значения varchar в тип данных int
Доброго времени суток! Есть три простые таблицы в базе Shop: первая - All_buy с данными о товарах: ( tovar_id integer ...

Ошибка преобразования значения varchar в тип данных int"
Нужно цифру из выбранного ряда в dataGridView1 разделить на 3 и вывести результат в текстбокс sumprtxt выдает ошибку Ошибка...

Ошибка при преобразовании содержимого ячейки DataGrid в int
Есть DataGrid, заполненный значениями с БД. При выборе нужной строки считывается значение ячейки айдишника (в БД хранится с типом bigint) и...

Ошибка: cannot convert 'int (*)[50]' to 'int*' for argument '1' to 'void vvod2m(int*, int*, int*, char)'Х2
Матрицы An1*m1 и Bn2*m2 вводить с клавиатуры (размерности >3, m1=n2). Выполнять через подпрограммы. выводит следующие ошибки: 1) cannot...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Номеклатура. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru