Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Object Pascal: кроссплатформенные технологии > Работа с файлами в Паскале.


Автор: roalang 4.12.2008, 10:51
Создаю типизированный файл, в процедуре Inputfile, при вводе данных в файл происходит зацикливание почему не могу разобраться, помогите пожалуйста.
Код

Program Tamazov;
uses Crt,Dos;
  type detsad=record
           Sname_rebenka, Name_rebenka:string[15];
           pol:string[5];
           FIO_mama:string[30];
           FIO_papa:string[30];
           telephon:integer;
           group:string[10];
           data_rogdenia:string[30];
           adres:string[20];
  end;
   var      f:file of detsad;
       zn, filename:string;
                 k:integer;
   kolnime:integer;
   ch:char;
  label 11;

procedure Creatfile;    {Создание файла}
    begin

  {writeln('Задайте имя файла, который будет создаваться');    }
  { filename:='c:\bp\bin\';   }
      { readln(filename); }
       assign(f, 'c:\bp\bin\deti.dat');
       {$I-}
       reset(f);
       {$I+}
       if IOResult<>0 then
       rewrite(f);
       end;

 procedure Inputfile;
    var  ch:char; st:detsad;
      begin
      kolnime:=0;
   
      repeat
        writeln('Введите данные о новом клиенте : ');
         write('Фамилия ребенка: ');                readln(st.Sname_rebenka);
         write('Имя ребенка: ');                    readln(st.Name_rebenka);
         write('Группа: ');                         readln(st.group);
         write('Пол: ');                            readln(st.pol);
         write('ФИО матери: ');                     readln(st.FIO_mama);
         write('ФИО отца: ');                       readln(st.FIO_papa);
         write('Телефон: ');                        readln(st.telephon);
         write('Дата рождение: ');                  readln(st.data_rogdenia);
         write('адрес: ');                          readln(st.adres);

         write(f,st);
         write('Надо ли вводить данные о новом клиенте? (Д/Н)');
         readln(ch);
      
      until (ch='н') or (ch='Н'); 
     close(f); 
  end;
 Begin  11:clrscr;
        writeln('МЕНЮ:':45);
        writeln('*************************':55);
        writeln('1:Создание файла':50);
                     readln(k);
         While ch<>#27 Do Begin
      {    Write('Press <Esc> to Exit':100); Х}

         case k of 1: begin Creatfile; Inputfile end;
                   2: begin Addrecord; Inputfile end;
                                      6: Halt;
             else writeln('Ошибка. Повторите номер режима.')
   end;
  end;
goto 11;
End.



Автор: Anark1 7.12.2008, 15:27
Вместо readln(ch) попробуй read(ch) а еще лучше ch:=readkey.

Автор: volvo877 7.12.2008, 16:42
roalang, тебе уже 800 раз сказали на других форумах, ГДЕ у тебя зацикливание, и КАК надо сделать, чтобы не было зацикливания. Изменяй основную программу, а не процедуру. В процедуре все нормально.

Anark1, это не поможет, поскольку зацикливание - не внутри repeat/until, а внутри
Код
While ch <> #27 do begin
  ... { этого цикла. K не изменяется, поэтому постоянно будет вызываться CreatFile + InputFile } 
end;

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