Помощь - Поиск - Пользователи - Календарь
Полная версия: Работа с файлами в Паскале.
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Анисия
Создаю типизированный файл, в процедуре 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

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




Айра

While ch<>#27 Do Begin
case k of 1: begin Creatfile; Inputfile end;
6: Halt;
else writeln('Ошибка. Повторите номер режима.')
end;

у тебя процедура создания записи заканчивается, если нажать на н\Н (а продолжается, если нажать на _любую_ другую клавишу), а этот цикл, как я поняла, должен закончиться, когда ch будет равно коду esc, (но, по-моему, он через readln не считается, нужно делать readkey), так что это никогда не происходит, вот он и начинает заново с предыдущим значением k..
Попробуй либо readkey, либо дальше используй переменную k и выход из while делай тоже по нажатию н\Н..
Анисия
Зацикливание то у меня вот здесь, не работает until (ch='н') or (ch='Н');

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;

volvo
Цитата
Зацикливание то у меня вот здесь
Тебе сказали, где у тебя зацикливание... В основной программе... Хочешь убедиться - добавь
...
write(f,st);
write('Надо ли вводить данные о новом клиенте? (Д/Н)');
readln(ch);

until (ch='н') or (ch='Н');
Writeln('Вышли из цикла, нажми Enter'); readln; { <--- Вот эту строку }
...

, и посмотри, как поведет себя программа... А чтобы она работала как ты задумал - надо сделать:
repeat
clrscr;
writeln('МЕНЮ:':45);
writeln('*************************':55);
writeln('1:Создание файла':50);
readln(k);
case k of
1:
begin Creatfile; Inputfile end;
6: ; { <--- Это для выхода, ничего не делать }
else
writeln('Ошибка. Повторите номер режима.')
end;
until k = 6; { <--- Вот и выход }
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.