Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Преобразование типов (StrToXXX) 
V
    Опции темы
hente
Дата 1.6.2009, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 20.3.2009
Где: Томск

Репутация: нет
Всего: нет



здраствуйте вопрос в следующем:

Код

AnsiString Str="123";
StrToInt(Str);


нармально преобразовывает а если в строке например 2 точки то понятно вылетает!!! Где проверять на наличие ошибки мож кто знает....

Просто в исключение впехивать не охота, может есть какой метод или есцо что?

За ранее благодарен...
--------------------
  долой быдло кодеров!!!
PM MAIL   Вверх
mrbrooks
Дата 1.6.2009, 11:38 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306




1.)StrToIntDef()
2.)TryStrToInt()
3.) собственно обработать исключение в try {} catch ()
PM MAIL   Вверх
hente
Дата 1.6.2009, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 20.3.2009
Где: Томск

Репутация: нет
Всего: нет



Спасибо огромноеsmile)
Попутно спрошу ребят у меня есть Едит как-нить можно до ввода определить что будет в нем храниться bool, int, unsigned int, long и так далее .... или только вручную (с помощью функций преобразования TryStrToXXX) проверять текст после ввода

Есть какие нить идеи?
--------------------
  долой быдло кодеров!!!
PM MAIL   Вверх
Dmi3ev
Дата 1.6.2009, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 16
Всего: 41



Цитата

Попутно спрошу ребят у меня есть Едит как-нить можно до ввода определить что будет в нем храниться bool, int, unsigned int, long и так далее .... или только вручную (с помощью функций преобразования TryStrToXXX) проверять текст после ввода

нет конечно, можно вот так, например:
Код

void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
    if ((Key >= '0') && (Key <= '9')) //цифра
     return;

    if (Key == DecimalSeparator)
    {
     if ((Edit1->Text).Pos(DecimalSeparator) != 0)
         Key = 0;
        return;
    }

    if (Key == VK_BACK)
     return;

    if (Key == VK_RETURN)
    {
     Edit2->SetFocus();
        return;
    }

    Key = 0;
}

а можно юзать MaskEdit, а там задавать маску ввода...

Добавлено через 35 секунд
в примере можно будет в эдит вводить только числа...


--------------------

PM MAIL   Вверх
hente
Дата 1.6.2009, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 20.3.2009
Где: Томск

Репутация: нет
Всего: нет



Да это то понятно просто мне придется все возможные типы вручную обрабатывать я думал может есть чо по быстрее

Блин чо так много базовых типов в С++ smile)


Спасибо большое.....
Dmi3ev, mrbrooks, спасибоsmile)
--------------------
  долой быдло кодеров!!!
PM MAIL   Вверх
Dmi3ev
Дата 1.6.2009, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 16
Всего: 41



Цитата

Да это то понятно просто мне придется все возможные типы вручную обрабатывать я думал может есть чо по быстрее
Блин чо так много базовых типов в С++ smile)

как организовать ввод чисел уже разобрали (в примере double, как организовать ввод int легко догадаться, просто убрать все про DecimalSeparator)...
ввод bool можно организовать с помощью ComboBox, а в нем либо да, либо нет выбирать...
ввод строки тупо через эдит...
короче, неясно, что тебе надо...



--------------------

PM MAIL   Вверх
mrbrooks
Дата 1.6.2009, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



Цитата(Dmi3ev @  1.6.2009,  12:42 Найти цитируемый пост)

как организовать ввод чисел уже разобрали (в примере double, как организовать ввод int легко догадаться, просто убрать все про DecimalSeparator)...
ввод bool можно организовать с помощью ComboBox, а в нем либо да, либо нет выбирать...
ввод строки тупо через эдит...
короче, неясно, что тебе надо...

ы?  smile 

Цитата(hente @  1.6.2009,  12:26 Найти цитируемый пост)
Блин чо так много базовых типов в С++ smile)

Столько же - как и везде. 
PM MAIL   Вверх
hente
Дата 2.6.2009, 08:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 20.3.2009
Где: Томск

Репутация: нет
Всего: нет



Dmi3ev, во-первых в вопросе сказано что есть только ЕДИТ и все.
во-вторых я искал более легкий способ обработки введенного числа чем в ручную, например на порядок код сократился 
с испоьзованием TryStrToXXX().

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

вот пример который вы дали:
Код

    if ((Key >= '0') && (Key <= '9')) //цифра
     return;

    if (Key == DecimalSeparator)
    {
     if ((Edit1->Text).Pos(DecimalSeparator) != 0)
         Key = 0;
        return;
    }

    if (Key == VK_BACK)
     return;

    if (Key == VK_RETURN)
    {
     Edit2->SetFocus();
        return;
    }

    Key = 0;


16-строчек!!!


вот мой код:
Код

if(!TryStrToInt(Edit->Text)){ 
              Message("Введено не правильно число");
              Edit->SetFocus();
              }



4-строчки
Причем если обрабатывать все типы которые знает хотябы С++ (не Builder) то выигрышь по объему очевиден!!!


mrbrooks, эт поеятно... что как и везде


И все же всем спасибо за отзывчивость...
--------------------
  долой быдло кодеров!!!
PM MAIL   Вверх
Dmi3ev
Дата 2.6.2009, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 16
Всего: 41



hente, твой код короче, но при этом мой и твой решают разные задачи... Твой проверяет ввел ли юзер Целое (если бы я делал проверку на целое, а не на с плавающей точкой, то код был бы короче), а мой код не дает вводить ничего кроме числа... Разница большая, хз...
Цитата

Причем если обрабатывать все типы которые знает хотябы С++ (не Builder) то выигрышь по объему очевиден!!!

Дело твое, тебе виднее, что ты там мутишь... Может тебе и не нужна проверка... Но еще раз повторюсь, что задачи мы разные решаем...


--------------------

PM MAIL   Вверх
mrbrooks
Дата 2.6.2009, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



Цитата(Dmi3ev @  2.6.2009,  10:23 Найти цитируемый пост)
hente, твой код короче, но при этом мой и твой решают разные задачи...

задачи то одинаковые - в твоем (классическом исполнение) - больше "защиты от дурака". но в какой то степени это не принципиально.

Цитата(hente @  2.6.2009,  08:30 Найти цитируемый пост)
Причем если обрабатывать все типы которые знает хотябы С++ (не Builder) то выигрышь по объему очевиден!!!

Это тебе так кажется.  Компилер подставляет код функции TryStrToInt() который насчитывает далеко не четыре строчки. Так что визуально оно и короче, на самом генерируемый в итоге код возможно даже больше, чем у Dmi3ev.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0599 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.