Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ковертирование переменных, из строки в целочисленное 
:(
    Опции темы
Mpak
Дата 16.11.2006, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 445
Регистрация: 12.11.2006

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



Код

void __fastcall TForm1::Button1Click(TObject *Sender) 
{ 
 switch (ComboBox1->ItemIndex) 
 { 
 case 0: Label1->Caption="Результат: "+Text1->Text+Text2->Text; 
         break; 
 case 1: Label1->Caption="Результат: "+Text1->Text*Text2->Text; 
         break; 
 case 2: Label1->Caption="Результат: "+Text1->Text-Text2->Text; 
         break; 
 case 3: Label1->Caption="Результат: "+Text1->Text/Text2->Text; 
         break; 
 } 
}


В Text1->Text содержиться цифра введенная с клавиатуры в форму...
При умножении и делениии все нормально, а при сложении, например 5 + 6 получается 56 ;)
А на вычитании просто зависает...

И заодно, если возможно: как сделать так, что бы в форму можно было вводить только цифры?


--------------------
В любой откомпилированной программе есть, по крайней мере, одна ошибка...
P.S. А у меня их минимум две...
PM MAIL ICQ   Вверх
Reptile
Дата 16.11.2006, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Нужно переводить в числа. Читай справку StrToInt, StrToFloat Тебе в помощь.


Цитата(Mpak @  16.11.2006,  14:42 Найти цитируемый пост)
И заодно, если возможно: как сделать так, что бы в форму можно было вводить только цифры?

Создаеш событие OnKeyPress, и проверяеш если в Key не цифра, то выходиш.

PM MAIL   Вверх
Rodman
Дата 16.11.2006, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

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



----

Это сообщение отредактировал(а) Rodman - 16.11.2006, 15:19
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Oberon83
Дата 16.11.2006, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 6.5.2005
Где: Республика Чуваши я

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



Цитата(Mpak @  16.11.2006,  14:42 Найти цитируемый пост)
void __fastcall TForm1::Button1Click(TObject *Sender)  
{  
 switch (ComboBox1->ItemIndex)  
 {  
 case 0: Label1->Caption="Результат: "+Text1->Text+Text2->Text;  
         break;  
 case 1: Label1->Caption="Результат: "+Text1->Text*Text2->Text;  
         break;  
 case 2: Label1->Caption="Результат: "+Text1->Text-Text2->Text;  
         break;  
 case 3: Label1->Caption="Результат: "+Text1->Text/Text2->Text;  
         break;  
 }  
}

Оч. интересно как у тебя хоть какие-то результаты выдает. Ты работаешь с AnsiString и операции *,/,+,- к нему просто не применимы (в арифметическом плане). Пиши вот так:
Код

 switch (ComboBox1->ItemIndex)    
 {    
 case 0: Label1->Caption="Результат: "+ AnsiString(StrToInt(Text1->Text)+StrToInt(Text2->Text));    
         break;    
 case 1: Label1->Caption="Результат: "+AnsiString(StrToInt(Text1->Text)*StrToInt(Text2->Text));    
         break;    
 case 2: Label1->Caption="Результат: "+AnsiString(StrToInt(Text1->Text)-StrToInt(Text2->Text));    
         break;    
 case 3: Label1->Caption="Результат: "+AnsiString(StrToInt(Text1->Text)/StrToInt(Text2->Text));    
         break; 

А насчет ввода в форму только цифер - не знаю. У меня для таких случаев просто перед обработкой стоит функция проверки формы, в том числе и на правильность ввода символов:
Код

//Проверка строки на наличие ошибок ввода
//text - Проверяемая строка
//delimiter - Список допустимых символов в строке
//message - Сообщение об ошибке
//header - Заголовок сообщения об ошибке
bool check_string(AnsiString text,AnsiString delimiter,char* message,char* header){
   for(int i=0;i<text.Length();i++)
              if(text.IsDelimiter(delimiter,i+1) == false){
              MessageBox(0, message, header, MB_OK);
              return 0;
              }
   return 1;           
}


Это сообщение отредактировал(а) Oberon83 - 16.11.2006, 15:09
--------------------
OpenArea.ru
PM MAIL ICQ   Вверх
Mpak
Дата 16.11.2006, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 445
Регистрация: 12.11.2006

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



Выложи ;) Буду рад...

Спасибо за информацию...


--------------------
В любой откомпилированной программе есть, по крайней мере, одна ошибка...
P.S. А у меня их минимум две...
PM MAIL ICQ   Вверх
Rodman
Дата 16.11.2006, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

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



для вещественных чисел
Код

void __fastcall TForm1::Button1Click(TObject *Sender) 
{ 
 switch (ComboBox1->ItemIndex) 
 { 
 case 0: Label1->Caption="Результат: "+FloatToStr(StrToFloat(Text1->Text)+StrToFloat(Text2->Text)); 
         break; 
 case 1: Label1->Caption="Результат: "+FloatToStr(StrToFloat(Text1->Text)*StrToFloat(Text2->Text)); 
         break; 
 case 2: Label1->Caption="Результат: "+FloatToStr(StrToFloat(Text1->Text)-StrToFloat(Text2->Text));
         break; 
 case 3: Label1->Caption="Результат: "+FloatToStr(StrToFloat(Text1->Text)/StrToFloat(Text2->Text));
         break; 
 } 

Если числа целые то
Код

void __fastcall TForm1::Button1Click(TObject *Sender) 
{ 
 switch (ComboBox1->ItemIndex) 
 { 
 case 0: Label1->Caption="Результат: "+IntToStr(StrToInt(Text1->Text)+StrToInt(Text2->Text)); 
         break; 
 case 1: Label1->Caption="Результат: "+InttToStr(StrToInt(Text1->Text)*StrToInt(Text2->Text)); 
         break; 
 case 2: Label1->Caption="Результат: "+IntToStr(StrToInt(Text1->Text)-StrToInt(Text2->Text));
         break; 
 case 3: Label1->Caption="Результат: "+IntToStr(StrToInt(Text1->Text)/StrToInt(Text2->Text));
         break; 
 } 

PM MAIL WWW Skype GTalk YIM MSN   Вверх
Oberon83
Дата 16.11.2006, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 6.5.2005
Где: Республика Чуваши я

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



Mpak, Смотри выше - отредактировал свой пост, добавил функцию.
--------------------
OpenArea.ru
PM MAIL ICQ   Вверх
Rodman
Дата 16.11.2006, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

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



для проверки вода только цифр используй TryStrToInt или TryStrToFloat...как их использовать смотри в хелпе...
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Reptile
Дата 16.11.2006, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Oberon83 @  16.11.2006,  15:07 Найти цитируемый пост)
А насчет ввода в форму только цифер - не знаю.

Помоему Ты перестарался smile 
Вот ввод только цифр, жаль на Delphi, под рукой Builder-а нет smile 
Код

if (Key in ['0'..'9'])  then

  else if (Key = Chr(VK_DELETE)) OR (Key = Chr(VK_BACK)) then begin
 end
 else Key := Chr(0);

Это на OnKeyPress.
Истравте под Builder кто может smile 

Это сообщение отредактировал(а) Reptile - 16.11.2006, 15:24
PM MAIL   Вверх
Oberon83
Дата 16.11.2006, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 6.5.2005
Где: Республика Чуваши я

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



Reptile, та функция, которую я выложил, используется не только для проверки цифра введена или нет, поэтому и так и выглядит.
--------------------
OpenArea.ru
PM MAIL ICQ   Вверх
Reptile
Дата 16.11.2006, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Я знаю но 
Цитата(Oberon83 @  16.11.2006,  15:07 Найти цитируемый пост)
А насчет ввода в форму только цифер - не знаю. 

А он просил
Цитата(Mpak @  16.11.2006,  14:42 Найти цитируемый пост)
И заодно, если возможно: как сделать так, что бы в форму можно было вводить только цифры?

Вот я и привел простой пример, только жаль на Delphi smile 


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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