Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Непонятная ошибка при проверке введённых элементов


Автор: IamDreamer 27.4.2008, 12:23
Код
for i:=1 to StringGrid1.ColCount do
      if TryStrToInt(StringGrid1.Cells[i, 1], z)=true then
        c[i]:=StrToInt(StringGrid1.Cells[i,1]) else
        begin
          MessageDlg('Массив заполнен неверно.',mtError, [mbOK], 0);
          Exit;
        end;

При любом раскладе выдаёт сообщение о неверно заполненном массиве.
Массив одномерный, помещается в одну строку, поэтому смысла во вложенном цикле, в принципе, нет.

Автор: THandle 27.4.2008, 12:28
Цитата(IamDreamer @  27.4.2008,  13:23 Найти цитируемый пост)
for i:=1 to StringGrid1.ColCount do
      if TryStrToInt(StringGrid1.Cells[i, 1], z)=true then
        c[i]:=StrToInt(StringGrid1.Cells[i,1]) else
        begin
          MessageDlg('Массив заполнен неверно.',mtError, [mbOK], 0);
          Exit;
        end;



Прикол)) А если первый элемент StringGrid'а содержит в себе не число? ТО что? Прям сразу и выходим? smile

Добавлено через 2 минуты и 44 секунды
Сделай вот так:

Код

procedure TForm1.Button1Click(Sender: TObject);
var
  i, z : integer;
begin
  for i := 1 to StringGrid1.ColCount - 1 do
    if TryStrToInt(StringGrid1.Cells[i, 1], z)=true then
      ShowMessage('Числоî')
    else
      MessageDlg('Элемент массива заполнен не верно',mtError, [mbOK], 0);
end;


И заполни первую строку StringGrid так:

(у моего StringGrid'а свойство ColCount = 5, первый не заполняем)

вввв|54|fgg|24

Отдельные элементы разделены.

Добавлено через 6 минут и 12 секунд
Вот так то есть заполни)) Уж кину картинку)

http://ipicture.ru/

Потом кнопочку брось на форму и напиши вышенаписанный мною код)

Автор: IamDreamer 27.4.2008, 12:39
Код
for i:=1 to StringGrid1.ColCount do
      if TryStrToInt(StringGrid1.Cells[i, 1], z)=true then
        a[i]:=StrToInt(StringGrid1.Cells[i,1]) else
        begin
          MessageDlg('Массив заполнен неверно.',mtError, [mbOK], 0);
          Exit;
        end;

Это я вписал в другом модуле, в котором сортировка другим методом. То же самое, но работает. Пробовал много раз.

Добавлено через 1 минуту и 46 секунд
Цитата(THandle @  27.4.2008,  12:28 Найти цитируемый пост)
Прикол)) А если первый элемент StringGrid'а содержит в себе не число? ТО что? Прям сразу и выходим? smile

У меня так процесс проходит: сначала я заполняю все поля в StringGrid'e, а потом они все проверяются. При хотя бы одном "нехорошем" элементе, программа выходит. 

Автор: THandle 27.4.2008, 12:42
Цитата(IamDreamer @  27.4.2008,  13:39 Найти цитируемый пост)

Это я вписал в другом модуле, в котором сортировка другим методом. То же самое, но работает. Пробовал много раз.



Все модули в студию smile

Добавлено через 1 минуту и 42 секунды
В виде архивчика естественно smile 

Автор: IamDreamer 27.4.2008, 12:49
Ну вот.

Автор: THandle 27.4.2008, 13:10
Значит так. Опытным путем удалось установить что в перовм методе сортировки(который "работает") элемент StringGrid.ColCount = -1

А во втором это пустая строка.

Это -1 игнорируется потому что идет следующий код:

Код

for i:=1 to N do
        a[i]:=StrToInt(StringGrid1.Cells[i,1]);


Заметь, именно до N.

А так как StringGrid1.ColCount := N + 1 этот элемент со значением -1 игнорируется.

И вообще.

Col и Row в StringGrid начинаются с нуля!!! А ColCount и RowCount показывают количество элементов. А количество начинается с 1. То есть чтобы получить нормальный цикл нужно писать не to StringGrid.ColCount,а to StringGrid.ColCount - 1.

Замени в обоих случаях свой код на такой:


Код

for i:=1 to StringGrid1.ColCount - 1 do
      if TryStrToInt(StringGrid1.Cells[i, 1], z)=true then
        a[i]:=StrToInt(StringGrid1.Cells[i,1]) else
        begin
          MessageDlg('Массив заполнен неверно.',mtError, [mbOK], 0);
          Exit;
        end;


И все будет работать smile 

Автор: IamDreamer 27.4.2008, 13:15
Спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)