Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Делфи _ Try except

Автор: Alucard 18.05.2009 2:56

Кнопка считывает число из Edit1 и вставляет его перед всеми числами, в которых есть цифра 1

Помогите вставить Try Except, что бы если edit1 оставить пустым, или вписать буквы, или ещё что то, кроме числа, что бы прога не вызывала ошибку, а просто ничего н епроисходило


Код
procedure TLABwork.Button3Click(Sender: TObject);
var       k,temp:integer;
begin
   memo1.Clear;
   for i:=1 to 10 do
   a[i]:=b[i];
   k:=StrToInt(edit1.Text);
   for i:=1 to 10 do
    begin
      temp:=0;
      if a[i]<0 then
         begin
            temp:=a[i]*-1;
            a[i]:=temp;
         end;
      m:=a[i] mod 10;
      n:=a[i] div 10;
      if (m=1) or (n=1) then
        begin
         if n=0 then
           begin
             k:=k*10;
             a[i]:=a[i]+k;
             if temp<>0 then a[i]:=a[i]*-1;
             memo1.lines.Add(intTostr(a[i]));
           end
        else
          begin
             k:=k*100;
             a[i]:=a[i]+k;
             if temp<>0 then a[i]:=a[i]*-1;
             memo1.lines.add(inttostr(a[i]));
          end;
        end;
        k:=StrToInt(edit1.Text);
        end;
end;

Автор: volvo 18.05.2009 12:35

Здесь Try/Except ни разу не нужен. Достаточно:

if TryStrToInt(Edit1.Text, k) then begin
// Все то, что ты делаешь сейчас
end;

Если строка в Edit1.Text не будет числом, или будет пустой, или будет представлять число, которое не помещается в диапазон Integer-а, то TryStrToInt вернет False, и ничего происходить не будет. Иначе - все как и было, TryStrToInt вернула True, в k хранится число, работа продолжается... Второй раз, в конце цикла, можно использовать уже обычный StrToInt, потому что уже ясно - в Edit1.Text хранится число.

Хотя что-то мне подсказывает, что это можно сделать гораздо проще... Полное задание и описания всех переменных приведи...

Автор: Alucard 18.05.2009 15:48

Дан массив целых чисел (n=10), заполненный случайным образом числами из промежутка [-40, 30]
• удалить из него все элементы, которые состоят из одинаковых цифр (включая однозначные числа);
• вставить число k перед всеми элементами, в которых есть цифра 1 (k вводить с клавиатуры);
• переставить первые три и последние три элемента местами, соблюдая их следование.

Код
  a,b:array[1..10] of integer;
  i:byte;
  m,n:integer;  


volvo
Нужно использовать именно Ty Except,

По идее нужный кусок выглядит так
Код
Try
      k:=StrToInt(edit1.Text);
   except
      showmessage('Введи число, дубина');
      edit1.SetFocus;
      exit;
   end;  


Но всё равно ошиба вылазит sad.gif((

Автор: volvo 18.05.2009 16:21

procedure TForm1.Button3Click(Sender: TObject);
var
i, value: integer;
begin
try
value := StrToInt(Edit1.Text);
// Здесь, собственно, код

except
ShowMessage('Введи число, дубина');
end;
end;
Прекрасно ловит НЕчисло в Edit1.Text... Только если ты запускаешь программу прямо из Дельфи, тебе надо отключить Tools -> Debugger Options -> Language Exception: Stop on Delphi Exceptions, ну, или запускать программу отдельно, из Windows Explorer-а, а не из IDE...

В случае Delphi 2006+ это отключается в Tools -> Options -> Debugger Options -> CodeGear Debuggers -> Notify on Language Exception (галочка в самом низу окна)