Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
8 / 8 / 5
Регистрация: 21.05.2014
Сообщений: 430
1

Как отловить ошибку, если значение не введено?

05.06.2015, 18:18. Показов 1599. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
всем доброго времени суток
собственно написал программу которая сортирует либо пузырьком либо вставками(в зависимости от выбора), все сортирует правильно, все ок, но такая беда если хоть одно значение массива не введено то программа выдает ошибку, часть кода будет ниже, собственно что вы можете посоветовать сделать ? только без замудрений если можно)
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
void __fastcall TForm1::Label11Click(TObject *Sender)
{
  float a=StrToFloat(Edit1->Text);
  float b=StrToFloat(Edit2->Text);
  float c=StrToFloat(Edit3->Text);
  float d=StrToFloat(Edit4->Text);
  float e=StrToFloat(Edit5->Text);
  float f=StrToFloat(Edit6->Text);
  float g=StrToFloat(Edit7->Text);
  float h=StrToFloat(Edit8->Text);
  float i=StrToFloat(Edit9->Text);
  float j=StrToFloat(Edit10->Text);
  float mo[10] = { a, b, c, d, e, f, g, h, i, j };
  if(Form2->RadioButton1->Checked){
    for (int i = 10 - 1; i >= 1; --i)
      for (int j = 0; j < i; ++j)
      {
          if (mo[j] > mo[j + 1])
          {
              int obmen = mo[j];
              mo[j] = mo[j + 1];
              mo[j + 1] = obmen;
          }
      }
          Form1->Edit1->Text=mo[0];
          Form1->Edit2->Text=mo[1];
          Form1->Edit3->Text=mo[2];
          Form1->Edit4->Text=mo[3];
          Form1->Edit5->Text=mo[4];
          Form1->Edit6->Text=mo[5];
          Form1->Edit7->Text=mo[6];
          Form1->Edit8->Text=mo[7];
          Form1->Edit9->Text=mo[8];
          Form1->Edit10->Text=mo[9];
          Form1->Edit31->Text=FloatToStr(45);
  }
 if(Form2->RadioButton2->Checked){
    for(int i=1;i<10;i++)
{
    int temp=mo[i];
    int p=i-1;
    while(temp<mo[p]&&p>=0)
    {
        mo[p+1]=mo[p];
        p--;
    }
    mo[p+1]=temp;
}
          Form1->Edit1->Text=mo[0];
          Form1->Edit2->Text=mo[1];
          Form1->Edit3->Text=mo[2];
          Form1->Edit4->Text=mo[3];
          Form1->Edit5->Text=mo[4];
          Form1->Edit6->Text=mo[5];
          Form1->Edit7->Text=mo[6];
          Form1->Edit8->Text=mo[7];
          Form1->Edit9->Text=mo[8];
          Form1->Edit10->Text=mo[9];
          Form1->Edit31->Text=FloatToStr(45);
  }
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.06.2015, 18:18
Ответы с готовыми решениями:

Определить, является ли введенное значение года високосным, если введено корректное значение
Определить, является ли введенное значение года високосным, если введено корректное значение.

Передать переменую id в die(); если введено неверное значение
Есть страница товара нужно сделать возвращение к этому товару к текущему id товара в случае если...

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

Найти в таблице значение (по второму столбцу) большее, чем введено в Edit и, если есть такие числа, вывести
procedure TForm8.btn1Click(Sender: TObject); var s,i,j,n,schetchik,h:integer; sred:Real; begin ...

9
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32964 / 21280 / 8170
Регистрация: 22.10.2011
Сообщений: 36,550
Записей в блоге: 8
05.06.2015, 19:27 2
Использовать StrToFloatDef вместо StrToFloat, чтобы не было ошибки: если что-то не заполнено - то присваивать соответствующей переменной некое дефолтное значение.
0
8 / 8 / 5
Регистрация: 21.05.2014
Сообщений: 430
05.06.2015, 19:45  [ТС] 3
volvo,
[C++ Error] Unit1.cpp(21): E2193 Too few parameters in call to '_fastcall StrToFloatDef(const AnsiString,const long double)'
6 билдер
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32964 / 21280 / 8170
Регистрация: 22.10.2011
Сообщений: 36,550
Записей в блоге: 8
05.06.2015, 19:53 4
C++
1
float a=StrToFloatDef(Edit1->Text, 0); // ну, или любое другое значение по умолчанию задавай
для всех переменных
1
8 / 8 / 5
Регистрация: 21.05.2014
Сообщений: 430
05.06.2015, 21:03  [ТС] 5
volvo, получилось, то что нужно, спасибо, но можешь вот что сказать еще, пробую так:
C++
1
float a=StrToFloatDef(Edit1->Text, (rand()%2000-1000));
работает, пробовал что-то вроде:
C++
1
float a=StrToFloatDef(Edit1->Text, (srand(time(NULL))(rand()%2000-1000)));
и пробовал ставить srand(time(NULL)); перед переменными, не работает, можешь подсказать как здесь использовать srand(time(NULL)); ?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32964 / 21280 / 8170
Регистрация: 22.10.2011
Сообщений: 36,550
Записей в блоге: 8
05.06.2015, 21:16 6
Лучший ответ Сообщение было отмечено tegami как решение

Решение

Инициализацию ГСЧ надо вынести куда-то, чтобы она выполнилось только при старте программы. Либо сюда:
C++
1
2
3
4
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
    Randomize();
}
, либо сюда:
C++
1
2
3
4
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    Randomize();
}
, а уже там, где нужно случайное число - вызывать:
C++
1
float a=StrToFloatDef(Edit1->Text, RandomRange(-1000, 1000)); // #include <math.h>
1
8 / 8 / 5
Регистрация: 21.05.2014
Сообщений: 430
05.06.2015, 21:31  [ТС] 7
volvo, вписал #include <math.h> сверху, поставил Randomize(); перед переменными в начало
C++
1
2
3
4
void __fastcall TForm1::Label11Click(TObject *Sender)
{
  Randomize();
  float a=StrToFloatDef(Edit1->Text, RandomRange(-1000, 1000));
и прописал RandomRange(-1000, 1000)
еще пробовал так
C++
1
2
3
4
5
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
Randomize();
}
в обоих случаях выдает
[C++ Error] Unit1.cpp(24): E2268 Call to undefined function 'RandomRange'
что может быть не так?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32964 / 21280 / 8170
Регистрация: 22.10.2011
Сообщений: 36,550
Записей в блоге: 8
05.06.2015, 22:43 8
Цитата Сообщение от tegami Посмотреть сообщение
поставил Randomize(); перед переменными в начало
Я же написал, не нужно этого делать. Достаточно один раз при начале работы приложения. Ну, дело твое, потом не удивляйся, что как-то странно работает...

Цитата Сообщение от tegami Посмотреть сообщение
что может быть не так?
Древний Билдер, например. Может, там еще нет этой функции. Тогда делай через Random(2000) - 1000. Надеюсь, хоть Random-то там есть?
0
8 / 8 / 5
Регистрация: 21.05.2014
Сообщений: 430
06.06.2015, 10:03  [ТС] 9
volvo, все-равно ошибка, билдер 6-й версии, ниже часть кода как я сделал, мне кажется не билдер старый а я что-то не так делаю
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
//---------------------------------------------------------------------------
#include "Unit2.h"
#include <time.h>
#include <vcl.h>
#include <math.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
 Randomize();
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Label11Click(TObject *Sender)
{
  float a=StrToFloatDef(Edit1->Text, Random(-1000, 1000));//пробую тут сделать рандом
  float b=StrToFloatDef(Edit2->Text, (rand()%2000-1000));
  float c=StrToFloatDef(Edit3->Text, (rand()%2000-1000));
  float d=StrToFloatDef(Edit4->Text, (rand()%2000-1000));
  float e=StrToFloatDef(Edit5->Text, (rand()%2000-1000));
  float f=StrToFloatDef(Edit6->Text, (rand()%2000-1000));
  float g=StrToFloatDef(Edit7->Text, (rand()%2000-1000));
  float h=StrToFloatDef(Edit8->Text, (rand()%2000-1000));
  float i=StrToFloatDef(Edit9->Text, (rand()%2000-1000));
  float j=StrToFloatDef(Edit10->Text, (rand()%2000-1000));
  float mo[10] = { a, b, c, d, e, f, g, h, i, j };
  if(Form2->RadioButton1->Checked){
    for (int i = 10 - 1; i >= 1; --i)
      for (int j = 0; j < i; ++j)
      {
          if (mo[j] > mo[j + 1])
          {
              int obmen = mo[j];
              mo[j] = mo[j + 1];
              mo[j + 1] = obmen;
          }
      }
          Form1->Edit1->Text=mo[0];
          Form1->Edit2->Text=mo[1];
          Form1->Edit3->Text=mo[2];
          Form1->Edit4->Text=mo[3];
          Form1->Edit5->Text=mo[4];
          Form1->Edit6->Text=mo[5];
          Form1->Edit7->Text=mo[6];
          Form1->Edit8->Text=mo[7];
          Form1->Edit9->Text=mo[8];
          Form1->Edit10->Text=mo[9];
          Form1->Edit31->Text=FloatToStr(45);
  }

пробовал и Random(2000) - 1000 и RandomRange(-1000, 1000)
щас еще попробую разобраться
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32964 / 21280 / 8170
Регистрация: 22.10.2011
Сообщений: 36,550
Записей в блоге: 8
06.06.2015, 11:08 10
Я выше написал, как надо сделать с использованием Random. Больше повторять не буду. Эта функция принимает один параметр, а не два
0
06.06.2015, 11:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.06.2015, 11:08
Помогаю со студенческими работами здесь

Как надёжно отловить ошибку в SetFilePointer?
А если младшая часть новой позиции совпадёт с INVALID_SET_FILE_POINTER?

Как отловить ошибку в функции GetSaveFileName?
А как узнать, что произошла именно ошибка в функции, а не пользователь нажал по стрелкам, или...

Как задать значение переменной которое введено в Edit?
Как задать значение переменной которое введено в Edit? вообщем чтобы из Edit значение поподало в...

Как можно отловить ошибку в PHP скрипте?
Как можно выловить ошибку. А проблема в том что переодически скрипт может вылетать иза привышения...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru