Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.03.2009, 13:02   #1
prikolist
Форумчанин
 
Аватар для prikolist
 
Регистрация: 18.06.2008
Сообщений: 350
Восклицание Если введён первый нуль в Edit,и не стоит запятая после него, выдать ошибку

Здравствуйте программисты! Подскажите пожалуйста, как Если введён первый нуль в Edit1,и не стоит запятая после него, выдать ошибку.Также, если стоит вначале больше одного нуля, выдать ошибку.
Это мне нужно на проверку вводимости лишних нулей, чтоб решить примерчик, например а+b результат в метку.
Остальные исключения я сделал, только в этом загвоздка.
Я вот попробывал так, но что-то не выходит:

Код:
if(Key == VK_NUMPAD0 && (Edit1->Text).Length(2)!=DecimalSeparator)
{
ShowMessage("Ошибка, в одном из полей, \n после первого нуля не стоит знака запятая!!");
}

Последний раз редактировалось prikolist; 28.03.2009 в 13:17.
prikolist вне форума Ответить с цитированием
Старый 28.03.2009, 13:33   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Так, например:
Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if (Edit1->Text.Length()<3 || (Edit1->Text[1]!='0' || Edit1->Text[2]!=DecimalSeparator))
 ShowMessage("Error!");
}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 28.03.2009, 14:34   #3
prikolist
Форумчанин
 
Аватар для prikolist
 
Регистрация: 18.06.2008
Сообщений: 350
По умолчанию

Когда я вставляю ваш код, у меня пропадают остальные исключения.
Я вложил весь проект, архивом, посмотрите пожалуйста, не сложный, куда именно нужно поместить туда ваш код. Также, ещё проблемма, У меня там находится 4 поля Edit1..Edit4. Когда я ввожу во все поля по одному нулю, не вылазит моё исключение "Деление на ноль", а вылазит на англ.язые. Заранне благодаре. Проект написан на С++ Билдер. Заранне благодарен ВАМ за ответ.

Модератор: аттачи запрещены

Последний раз редактировалось MaTBeu; 28.03.2009 в 22:11.
prikolist вне форума Ответить с цитированием
Старый 28.03.2009, 14:50   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

А, так..
Ну тогда по-другому это будет выглядеть:
Код:
if(Edit1->Text[1]=='0' && Edit1->Text[2]!=DecimalSeparator)
 {
 ShowMessage("Error!");
 return;
 }
Так для каждого эдита. Вставить после проверок на пустоту полей.

Проект у меня почему-то не компилится (ошибки). Но вроде понял, почему выдает ошибку.

Она возникает, если поля b и c одновременно равны 0.
При этом в выражении:
Код:
otvet = c + 4*d - sqrt(123 * c)/b - a/2;
возникает неопределенность 0/0. Насколько я знаю, это не считается делением на ноль. Поэтому нужно отдельно проверять этот случай.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 28.03.2009, 15:26   #5
prikolist
Форумчанин
 
Аватар для prikolist
 
Регистрация: 18.06.2008
Сообщений: 350
По умолчанию

Я вставил такой код, в блок try ... catch. И теперь, при вводе, нулей, во все строки Edit, выдаёт другую ошибку: float operation но деление на ноль, не выдаёт. Подскажите пожалуйста, какое исключение можно прописать в блоке, или может как-то ифом попробывать? Зараннее благодарен за ответ. Если вставить код который ниже, перед блоком try..cath. выдаст Acces operation

Вот код, я добавил:

Код:
// Проверка на ввод запятой, после ввода первого нуля.
//Если в одном из полей Edit1..Edit4 введено больше 1 нуля и
// не стоит запятая после первого нуля, программа выдаёт ошибку.

if(Edit1->Text[1]=='0' && Edit1->Text[2]!=DecimalSeparator)
 {
 ShowMessage("Ошибка! Вы не поставили запятую после 1-го нуля");
 return;
 }


if(Edit2->Text[1]=='0' && Edit2->Text[2]!=DecimalSeparator)
 {
 ShowMessage("Ошибка! Вы не поставили запятую после 1-го нуля");
 return;
 }

if(Edit3->Text[1]=='0' && Edit3->Text[2]!=DecimalSeparator)
 {
 ShowMessage("Ошибка! Вы не поставили запятую после 1-го нуля");
 return;
 }


if(Edit4->Text[1]=='0' && Edit4->Text[2]!=DecimalSeparator)
 {
 ShowMessage("Ошибка! Вы не поставили запятую после 1-го нуля");
 return;
 }

//-----------------------------------------------------------
Посмотрите проект, пожалуйста, он с добавленным кодом.

//Модератор: аттачи запрещены

Последний раз редактировалось MaTBeu; 28.03.2009 в 22:12.
prikolist вне форума Ответить с цитированием
Старый 28.03.2009, 15:41   #6
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
И теперь, при вводе, нулей, во все строки Edit, выдаёт другую ошибку:
Да, да.. Забыл совсем )
Код:
if(Edit1->Text.Length()>1)
 {
  if(Edit1->Text[1]=='0' && Edit1->Text[2]!=DecimalSeparator)
   {
    ShowMessage("Поставьте запятую!");
    return;
   }
 }
Только ставить это надо ДО преобразования в число.
То есть сразу после проверки на пустоту:
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 28.03.2009, 15:48   #7
prikolist
Форумчанин
 
Аватар для prikolist
 
Регистрация: 18.06.2008
Сообщений: 350
По умолчанию

Выдаёт: Invalid Floating point Operation

Код:
//Выводим результат в Label1  проверив на исключения
try
{
//Присваиваем переменным а,b,c,d введённые значения. в Edit1..Edit4
//Преобразуем с текстового типа символы в вещественый тип Float
a = StrToFloat(Edit1->Text);
b = StrToFloat(Edit2->Text);
c = StrToFloat(Edit3->Text);
d = StrToFloat(Edit4->Text);


//Результат вычислений присваиваем переменной "otvet"
otvet = c + 4*d - sqrt(123 * c)/b - a/2;

//-----------------------------------------------------------

// Проверка на ввод запятой, после ввода первого нуля.
//Если в одном из полей Edit1..Edit4 введено больше 1 нуля и
// не стоит запятая после первого нуля, программа выдаёт ошибку.
if(Edit1->Text.Length()>1)
if(Edit1->Text[1]=='0' && Edit1->Text[2]!=DecimalSeparator)
 {
 ShowMessage("Ошибка! Вы не поставили запятую после 1-го нуля");
 return;
 }

if(Edit2->Text.Length()>1)
if(Edit2->Text[1]=='0' && Edit1->Text[2]!=DecimalSeparator)
 {
 ShowMessage("Ошибка! Вы не поставили запятую после 1-го нуля");
 return;
 }
if(Edit3->Text.Length()>1)
if(Edit3->Text[1]=='0' && Edit1->Text[2]!=DecimalSeparator)
 {
 ShowMessage("Ошибка! Вы не поставили запятую после 1-го нуля");
 return;
 }

if(Edit4->Text.Length()>1)
if(Edit4->Text[1]=='0' && Edit1->Text[2]!=DecimalSeparator)
 {
 ShowMessage("Ошибка! Вы не поставили запятую после 1-го нуля");
 return;
 }

//-----------------------------------------------------------




//Результат пполучаем в метке Label 1
Label1->Caption = "Результат=" + FloatToStrF(otvet,ffGeneral,7,2);
}
catch(EZeroDivide&)
{
MessageBox(0,"Ошибка! Деление на ноль!!!","Ошибка",MB_ICONERROR);
}
catch(EConvertError&)
{
MessageBox(0,"Ошибка! Неправильно введено число в одном из \n полей. Возможно в полях присутствуют неправильные \n знаки вроде: w,п,!,%,$,. и т.д.","Ошибка",MB_ICONERROR);
}
catch(EOverflow&)
{
ShowMessage("Выход числа за допустимый диапазон");
}
}
//---------------------------------------------------------------------------

Последний раз редактировалось prikolist; 28.03.2009 в 15:55.
prikolist вне форума Ответить с цитированием
Старый 28.03.2009, 15:54   #8
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Выдаёт: Invalid Floating point Operation
Я уже третий раз вам говорю: это надо ставить ДО преобразования. То есть до этого:
Код:
a = StrToFloat(Edit1->Text);
b = StrToFloat(Edit2->Text);
c = StrToFloat(Edit3->Text);
d = StrToFloat(Edit4->Text);
И говорите конкретнее, что вы вводите.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 28.03.2009, 15:59   #9
prikolist
Форумчанин
 
Аватар для prikolist
 
Регистрация: 18.06.2008
Сообщений: 350
По умолчанию

Всё, большое спасибо, наконец-то, просто не знал, что нужно вставлять этот код в блоке try..catch Перед преобразование в вещественное число.

Последний раз редактировалось prikolist; 28.03.2009 в 16:43.
prikolist вне форума Ответить с цитированием
Старый 28.03.2009, 16:45   #10
prikolist
Форумчанин
 
Аватар для prikolist
 
Регистрация: 18.06.2008
Сообщений: 350
По умолчанию

Когда я ввожу по одному нулю в каждое поле с Edit1..Edit4. выдаёт Invalid floating poin overflaw, когда ввожу нули во все поля. Не скажите как убрать это англ исключение.
prikolist вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дан двухмерный массив из 20 столбцов. Вставить в него столбец из чисел 10 после всех четных столбцов. Дмитрий142 Помощь студентам 9 07.06.2012 19:32
Как выдать ошибку с красным крестиком со звуком prikolist Общие вопросы C/C++ 3 16.03.2009 14:47
записанное в Edit сохранить после закрытия IVANSour Общие вопросы Delphi 6 21.01.2009 03:33
Вставить первую строку после строки, в которой находится первый встреченный максимальный элемент. JiLiYa Паскаль, Turbo Pascal, PascalABC.NET 4 03.12.2008 12:13
стоит ли учить язык Форт? если да, то зачем =) Lilith Свободное общение 10 15.06.2008 13:34