Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/16: Рейтинг темы: голосов - 16, средняя оценка - 4.50
 Аватар для lordik55
4 / 4 / 3
Регистрация: 28.07.2012
Сообщений: 185

Защита от ввода некорректных значений

05.11.2012, 22:48. Показов 3186. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем здравствуйте, решил поставить на защиту от ввода некорректных значений свою программку. Несколько готовых решений нашёл из своего старого калькулятора на Delphi. Перевел защиту от пустых строк. Работает:
C++
1
2
3
4
5
6
7
8
if ((Edit1->Text=="") || (Edit2->Text==""))
  {
    ShowMessage("EЯЯ0Я");
  }
  else if ((Edit1->Text!="") || (Edit2->Text!="")) {
 
  Lambda=StrToFloat(Edit1->Text);
  Time_Obs=StrToFloat(Edit2->Text);
Сейчас задался вопросом, а возможно остальной код переделать? Попробовал сделать с вводом букв (мне надо чтобы вводились только цифры >0) - не хочет компилиться.

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
  begin
  if not (Key in ['0'..'9',#8,',','-']) then
   begin
    showmessage('Ошибка, Символ!');
    key:=#0;
   end
 else
   begin
    if (Key=',')and ((pos(',',edit1.Text)>0) or (edit1.Text='')) then
      begin
       showmessage ('Ошибка, Запятая!');
       Key:=#0;
      end;
    if (key='-') and ((pos('-',edit1.Text)>0) or (edit1.Text <>'')) then
   begin
    Showmessage ('Ошибка, Минус');
    key:=#0;
   end;
   end;
  end;
Данный код позволяет ввести только цифры, один минус и один отделитель (запятую).
В C++ на Edit'е так-же пробовал делать через KeyPress. Есть предположения?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.11.2012, 22:48
Ответы с готовыми решениями:

Защита от ввода некорректных данных, например в формате 2,5е+10
Здравствуйте! Помогите сделать &quot;защиту от дурака&quot; - ввод некорректных данных. Необходимо в программе вводить числовые значения от 1е19 до...

Защита от ввода некорректных данных в консольной программе
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;conio.h&gt; #include &lt;cmath&gt; using namespace std; ...

Триггер. Защита от добавления некорректных значений в таблицу
Есть триггер. Есть две таблицы. Нужно сделать так чтобы нельзя было ввести в поля таблицы directory_of_org_bi inn и kpp значения, первые...

6
 Аватар для Gremlin
519 / 307 / 58
Регистрация: 30.07.2008
Сообщений: 607
05.11.2012, 23:45
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
62
63
64
65
66
67
68
69
70
71
72
73
//---------------------------------------------------------------------------
bool wj_IsInt(String inp)
{
    // если входная строка пустая
    if(inp.Length() == 0)
    {
        return false;
        Form1->Caption = "1";
    }
    int i = 1;
    // возможно отрицательное число (-12345)
    if(inp[i] == '-' && inp.Length() > 1)
    {
        i++;
    }
    // продолжаем проверку
    bool ret = true;
    bool zap = false; // для поиска запятой
    for(i; i <= inp.Length(); i++)
    {
        // если символ (1,2,3,4,5,6,7,8,9,0) то все ок!
        if(String(inp[i]) == "1" ||
        String(inp[i]) == "2" ||
        String(inp[i]) == "3" ||
        String(inp[i]) == "4" ||
        String(inp[i]) == "5" ||
        String(inp[i]) == "6" ||
        String(inp[i]) == "7" ||
        String(inp[i]) == "8" ||
        String(inp[i]) == "9" ||
        String(inp[i]) == "0")
        {
            // good
        }
        else if(String(inp[i]) == ",") // разрешаем запятую если...
        {
            if(zap == false) // если она раньше не встрячалась
            {
                if(i < inp.Length()) // если она не последняя в строке, при желании,
                                         //можно оставить ее последней, но дописать вконце "0" для валидности
                {
                    zap = true; // помечаем, что запятая уже есть
                }
                else
                {
                    return false;
                }
            }
            else // если же она раньше уже встречалась... то ошибка
            {
                return false;
            }
        }
        else // если в строке несколько запятых, или другие символы то - Fail
        {
            return false;
        }
    }
    return ret; // если цикл пройден то это число
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
    if(wj_IsInt(Edit1->Text))
    {
        Button2->Caption = "true";
    }
    else
    {
        Button2->Caption = "false";
    }
}
//---------------------------------------------------------------------------
0
06.11.2012, 07:00

Не по теме:

Цитата Сообщение от Gremlin Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
if(String(inp[i]) == "1" ||
 String(inp[i]) == "2" ||
 String(inp[i]) == "3" ||
 String(inp[i]) == "4" ||
 String(inp[i]) == "5" ||
 String(inp[i]) == "6" ||
 String(inp[i]) == "7" ||
 String(inp[i]) == "8" ||
 String(inp[i]) == "9" ||
 String(inp[i]) == "0")
C++
1
2
if(String(inp[i]) >= "0" &&
 String(inp[i]) <= "9")

0
 Аватар для Gremlin
519 / 307 / 58
Регистрация: 30.07.2008
Сообщений: 607
06.11.2012, 10:42
еще можно так:
C++
1
if(!isdigit(inp[i]))
но почему то ошибка у меня была в коде, всегда false возвращало, поэтому и поставил костыль для видимости
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
06.11.2012, 10:58
может,
C++
1
inp[i]
должно быть
C++
1
char
, а не
C++
1
String
0
06.11.2012, 19:29

Не по теме:

Так вроде String[] должна возвращать char, или я путаю с чем-то?

0
 Аватар для lordik55
4 / 4 / 3
Регистрация: 28.07.2012
Сообщений: 185
06.11.2012, 22:07  [ТС]
Цитата Сообщение от Gremlin Посмотреть сообщение
Код C++
Спасибо конечно за свой метод, но я бы лучше своим методом. Вот перевёл так, чтобы вводились только цифры в Edit'ы:
C++
1
2
3
4
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, wchar_t &Key)
{
    if (Key < '0' || Key > '9') Key = 0;
}
Осталось на более двух запятых и отрицательных значений.

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
  begin
  if not (Key in ['0'..'9',#8,',','-']) then
   begin
    showmessage('Ошибка, Символ!');
    key:=#0;
   end
 else
   begin
    if (Key=',')and ((pos(',',edit1.Text)>0) or (edit1.Text='')) then
      begin
       showmessage ('Ошибка, Запятая!');
       Key:=#0;
      end;
    if (key='-') and ((pos('-',edit1.Text)>0) or (edit1.Text <>'')) then
   begin
    Showmessage ('Ошибка, Минус');
    key:=#0;
   end;
   end;
  end;
=> C++
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.11.2012, 22:07
Помогаю со студенческими работами здесь

защита от некорректных данных в конструкторе
Здравствуйте, вот пишу довольно тривиальный класс о представлении треугольника. Поля класса - углы и стороны. По моему мнению для...

Защита от ввода больших значений
Здравствуйте. Подскажите, как проверять ввод на слишком большие значения? Можно поциферно записывать в массив, считать число разрядов и...

Вычисление квадратного корня: защита от некорректных данных
Всем привет. Начал потихоньку изучать паскаль abc net. Короче, написал я прогу для вычисления квадратного корня, но собственно не это...

Delphi, защита от некорректных действий пользователя, не работает
Начали изучать Delphi таким образом: набираем код из распечаточки с комментами... и смотрим.. учимся, так сказать, но пока еще мало понятны...

Отсеивание ряда от некорректных значений при ненормальном распределении
Доброго времени суток. Предположим, есть два ряда значений: 1: 25, 26, 25 2: 25, 25, 44 Существует какая-либо формула, с помощью...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru