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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.07.2010, 10:54   #1
Nlegion
Новичок
Джуниор
 
Регистрация: 18.07.2010
Сообщений: 3
По умолчанию проверка на символы...

мне нужно сделать так чтобы в эдите могли находиться только определенные символы, типа латиница, нижнее подчеркивание.

пробовал два варианта... но оба у меня вызывают ошибку range check error во время работы проги.

вариант 1)

Код:
if (Edit6->Text !=("q")||("w")||("8")||("9")||("0"))
   {ShowMessage ("Некорректные символы.");
	  Edit6->Text="";
		Edit6->SetFocus();}
		 else
в дальнейшем if повторяется несколько раз, т.к. проверить нужно еще 6 эдитов.

вариант 2)

Код:
for(f=0; f<StrToInt(Edit6->Text.Length()); f++)
if (e2[f]>=65&&e2[f]<=90||e2[f]>=97&&e2[f]<=122||e2[f]==StrToInt('_'))
{ Edit6->Text="";
   Edit6->SetFocus(); }
else {("Некорректные символы."); }
так же пробовал подпихнуть в первый вариант цикл for

Код:
e2=Edit6->Text; 
for(f=0; f<StrToInt(Edit6->Text.Length()); f++)
if (e2[f] !=("q")||("w")||("8")||("9")||("0"))
   {ShowMessage ("Некорректные символы.");
	  Edit6->Text="";
		Edit6->SetFocus();}
		 else
результатов тоже не особо....
поможите разобраться плз...

Последний раз редактировалось Stilet; 19.07.2010 в 12:56.
Nlegion вне форума Ответить с цитированием
Старый 19.07.2010, 11:39   #2
D@rkD@iver
Форумчанин
 
Регистрация: 28.07.2009
Сообщений: 189
По умолчанию

Код:
procedure TForm2.Edit1Change(Sender: TObject);
var
  i: integer;
  s: string;
begin
  s:= Edit1.Text;
  for i:= 1 to length(s) do
  begin
    if not ((s[i]>='A') and (s[i]<='Z')) then
      Delete(s, i, 1);
  end;
  Edit1.Text:= s;
end;
ну потом в усовие напиши какие символы разрешены и все

код на паскале, ну думаю на С++ переведешь...
смысел один и тот же
пишу программы для студентов и школьников на Pascal, Delphi, C++, WINAPI, assembler
обучаю программированию на паскале(дистанционно);mail: hruslow@gmail.com

Последний раз редактировалось Stilet; 19.07.2010 в 13:03.
D@rkD@iver вне форума Ответить с цитированием
Старый 19.07.2010, 13:05   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Лучше так:
Код:
for(int i=1;i<strlen(Edit6->Text);i++)
 if( (Edit6->Text[i]<'A')||(Edit6->Text[i]>'z')&&(Edit6->Text[i]!='_') ){
  ShowMessage ("Некорректные символы.");
  break;
 }
p.s. не проверял.

А еще лучше проверять вводимый символ в параметр Key события OnKeyPress и если тот не такой как нужно key=0;
Или взять MaskEdit и не париться.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.07.2010, 13:23   #4
Korben5E
Форумчанин
 
Аватар для Korben5E
 
Регистрация: 13.07.2010
Сообщений: 346
По умолчанию

Вообще-то это делается в событии OnKeyPress
проверка делается рангом или тупо - массивом.
Non est culpa vin, sed culpa bibentis
Korben5E вне форума Ответить с цитированием
Старый 19.07.2010, 13:24   #5
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

Код:
AnsiString tmp;
for(int i=1; i < Edit6->Text.Length(); i++){
        tmp = Edit6->Text[i];
        if( tmp != '_' && (tmp < 'a' || tmp > 'z' || tmp < 'A' || tmp > 'Z' )) {
          ShowMessage("Некорректные символы.");
          break;
        }
}
тоже не проверял =)
NiCola999 вне форума Ответить с цитированием
Старый 19.07.2010, 14:11   #6
Nlegion
Новичок
Джуниор
 
Регистрация: 18.07.2010
Сообщений: 3
По умолчанию

у меня была кэпская ошибка...
я в цикл начинал с 0... видимо в эдит все начинается с 1...
не знал...
Nlegion вне форума Ответить с цитированием
Старый 19.07.2010, 14:23   #7
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от Nlegion Посмотреть сообщение
у меня была кэпская ошибка...
я в цикл начинал с 0... видимо в эдит все начинается с 1...
не знал...
Не именно в эдит, а в String, для совмести с Delphi )
netrino вне форума Ответить с цитированием
Старый 19.07.2010, 15:20   #8
Nlegion
Новичок
Джуниор
 
Регистрация: 18.07.2010
Сообщений: 3
По умолчанию

итак.. заработало...
выглядит вот так вот:

for(int f=1; f <= StrToInt(e1.Length()); f++){
if( (e1[f]<'0')||(e1[f]>'9')&&(e1[f]!='_') )
{Edit1->SetFocus();
ShowMessage ("Некорректные символы в номере столбца.Вводите только цифры,вместо пробела вводится нижняя черта.");
break; }

трудность теперь в следующем:
break он прекращает действия оператора, и передает действие на оператор, следующий за законченным, то биш на for получается что break бесполезен и прога многократно выводит предупреждение замес одного... как эт поправить?
Nlegion вне форума Ответить с цитированием
Старый 19.07.2010, 16:28   #9
mrChester
Я
Форумчанин
 
Аватар для mrChester
 
Регистрация: 24.04.2010
Сообщений: 693
По умолчанию

Можно создать булеву переменную, добавить ее в в условие цикла и при показе сообщения изменить ее значение на противоположное.
Можно вместо break использовать goto и переходить дальше
Все персонажи вымышлены, все совпадения случайны.
Если жизнь игра, тогда я её разработчик ©.
mrChester вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Символы! darter96 Помощь студентам 3 25.02.2010 20:01
символы Nostalgia Помощь студентам 12 30.12.2008 20:19
СИМВОЛЫ - помогите решить задачу на символы kiko Паскаль, Turbo Pascal, PascalABC.NET 5 30.11.2008 16:09
символы Rend1 Общие вопросы Delphi 1 10.04.2008 01:39