Помощь - Поиск - Пользователи - Календарь
Полная версия: не понятная ошибка при чтении из файла элементы поля типа ЗАПИСЬ.
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Andrewshkovskii
спасибо!
появилась ешё 1 проблема...(сколькож можно..)

Читаем последний пост
мисс_граффити
не в файле дело.
смотри:
Tabl = array [1..10] of Card;
  Scard:Tabl;


 i:=0;
     while not eof(f) do {есле этот цикл заменить на цикл for,то все прекрасно выводиться,но надо указывать N самостоятельно} //ты ведь в цикле for делаешь i:=1 to n, а не i:=0 to n, правда?...
       begin
        read(f,Scard[i]);//чему i равно при первом проходе? 0, правильно? и куда ты считываешь?
        i:=i+1;
       end;
Andrewshkovskii
спасибо.
Посмотри ,пожалуйста,ешё первый пост,я исправил ,и добавил новый вопрос..=/
мисс_граффити
не надо было исправлять - лучше бы отдельно написал.
 if q=1 then
  begin <-----!вот
   writeln('Vvedite familiu');
   repeat
readln(Fam);
if (Length(Fam) >14 ) or (Length(Fam) <1) then
 begin
  writeln('Maks. dlina familii 14.Min. 1!');
  writeln('Povtorite Vvod!');
 end;
   until (Length(Fam) in [1..24]);
{...ввод...}
end; <----! от добавленного begin
Andrewshkovskii
спасибо!помогло!=)

Теперь ешё одна проблема

После удаления элемента из массива записей,и последующей записи данных в файл,программа перестает читать файл,и выдает ошибку Disk read error..
В чем проблема?

Вот процедура удаления,сохранения,и загрузки файла.

 Procedure FileRead;
  var
   X:byte;
   Path:string;
   begin
        repeat
         Writeln('Vvedite pyt k faily');
         readln(path);
         assign(f,path);
         {$I-}
         reset(f);
         x:=IORESULT;
         {$I+}
         if x<>0 then
           writeln('Oshibka! Ne verno ykazan pyt!');
        until (x=0);
      path:='n';
      assign(f2,path);
      reset(f2);
      read(f2,n);
      close(F2);
     for i:=1 to n  do
       begin
        read(f,Scard[i]); {<<-- вот здесь ошибка выскакивает}
       end;
       close(f);
       end;



Procedure FileSave;
   var
    x:byte;
    path:string;
   begin
    repeat
     Writeln('Vvedite imya faila i pyt');
     readln(path);
     assign(f,path);
     {$I-}
     rewrite(f);
     x:=IORESULT;
     {$I+}
     if x<>0 then
               writeln('Oshibka! Ne verno ykazano imya i pyt!');
    until (x=0);
    for i:=1 to n do
     write(f,Scard[i]);
    close(f);
   end;


 procedure DeleteT( var Scard:tabl);
  var
   q,w,e,r,t:byte;
 begin
  Writeln('Vvedite nomer stydenta,kotorogo hotite ydalit iz tablici');
  repeat
   readln(q);
   if (q<1) or (q>n) then
    writeln('Vi neverno vveli nomer stydenta!Povtoite Vvod!');
  until(q in [1..n]);
  for i:=q to n do
   begin
  Scard[i].Sname:=Scard[i+1].Sname;
  Scard[i].Vball:=Scard[i+1].Vball;
  for j:=1 to 4 do
   Scard[i].Ekz[j]:=Scard[i+1].Ekz[j];
  For k:=1 to 3 do
   Scard[i].Zach[k]:=Scard[i+1].Zach[k];
   end;
   n:=n-1;
   Output(Scard);
  ENd;


и навсякий случай,процедура вывода на экран информации :
 procedure OutPut(var Scard:tabl);
  begin
   Writeln ('Vivod informacii');
   DrawTablHead;
   for i:=1 to n do
    begin
     write('і  # ',i);
     write('і',Scard[i].Sname);
     DlinaF(Scard[i].Sname);
     for j:=1 to h do
      write(' ');
     write('і');
     if (Scard[i].Vball)>9 then
      write('     ',Scard[i].VBall,'    і')
     else
      write('     ',Scard[i].VBall,'     і');
     write(Scard[i].Ekz[1],' і');
     write(Scard[i].Ekz[2],' і');
     write(Scard[i].Ekz[3],' і');
     write(Scard[i].Ekz[4],' і');
     write(Scard[i].Zach[1],' і');
     write(Scard[i].Zach[2],' і');
     write(Scard[i].Zach[3],' і');
     writeln;
    end;
  drawtabllegs;
  end;
мисс_граффити
хмм...
вот здесь ты n изменяешь:
 procedure DeleteT( var Scard:tabl);
...
 n:=n-1;

а изменяется ли оно в файле 'n'?
Andrewshkovskii
хм..ты правда..чертова невнимательность=/спасибо огромное!=)
+1 Вам,Юлия!=)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.