File not open - Free Pascal
Формулировка задачи:
Есть код
в котором ошибку выдаёт на строке 113:
а в других компиляторах пишет
Листинг программы
- program project1;
- type info=record
- surname, NameManufactory:string;
- salary:integer;
- a,b,c:word;
- end;
- const
- Sa = 237;
- Sb = 412;
- Sc = 196;
- var t:info;
- digit:byte;
- n:string;
- f:text;
- inform:info;
- procedure Create;
- var c:char;
- begin
- write('Введите название файла: ');
- readln(n);
- assign(f,n);
- rewrite(f);
- repeat
- writeln ('Введите фамилию работника: ');
- readln (inform.surname);
- writeln (f,inform.surname);
- writeln ('Введите наименование цеха: ');
- readln (inform.NameManufactory);
- writeln (f,inform.NameManufactory);
- writeln ('Введите количество изделий А');
- readln (inform.a);
- writeln (f,inform.a);
- writeln ('Введите количество изделий B');
- readln (inform.b);
- writeln (f,inform.b);
- writeln ('Введите количество изделий С');
- readln (inform.c);
- writeln (f,inform.c);
- repeat
- writeln ('Вводить следующего работника (y/n)?: ');
- readln (c);
- if (c<>'y') and (c<>'n') then Writeln('Ошибка ввода');
- until (c='y') or (c='n');
- until c='n';
- close (f);
- end;
- procedure View;
- begin
- write('Введите название файла: ');
- readln(n);
- assign(f,n);
- {$I-}
- reset(f);
- {$I+}
- while not eof(f) do begin
- readln(f,inform.surname);
- readln(f,inform.NameManufactory);
- readln(f,inform.a);
- readln(f,inform.b);
- readln(f,inform.c);
- inform.salary:=Sa*inform.a+Sb*inform.b+Sc*inform.c;
- writeln (inform.surname,' ':(15-Length(inform.surname)),inform.NameManufactory,' ':(23-Length(inform.NameManufactory)),inform.A:3,' ',inform.B:3,' ',inform.C:3,' ',inform.salary:3);
- writeln;
- end;
- close(f);
- end;
- procedure check;
- begin
- while ioresult<>0 do
- begin
- writeln('Указанный файл не найден!');
- write('Введите название файла: ');
- readln(n);
- assign(f,n);
- reset(f);
- close(f);
- end;
- end;
- procedure FindWorkerManufName;
- var s:string;
- begin
- write('Введите название файла: ');
- readln(n);
- assign(f,n);
- {$I-}
- check;
- reset(f);
- {$I+}
- while not eof(f) do
- begin
- readln(f,inform.surname);
- readln(f,inform.NameManufactory);
- readln(f,inform.a);
- readln(f,inform.b);
- readln(f,inform.c);
- // write('Введите название цеха: ');
- // readln(s);
- // if (s<>'') then
- // begin
- // writeln('Success');
- // end;
- // else
- // writeln('Ошибка!Введите корректное название цеха');
- reset(f);
- close(f);
- end;
- end;
- procedure FindWorkerIncome;
- begin
- write('Введите название файла: ');
- readln(n);
- assign(f,n);
- {$I-}
- reset(f);
- check;
- {$I+}
- end;
- procedure FindWorkerSurname;
- begin
- write('Введите название файла: ');
- readln(n);
- assign(f,n);
- {$I-}
- reset(f);
- check;
- {$I+}
- close(f);
- { while not eof(f) do begin
- readln(f,inform.surname);
- readln(f,inform.NameManufactory);
- readln(f,inform.a);
- readln(f,inform.b);
- readln(f,inform.c);
- end;}
- end;
- begin
- while digit<>6 do
- begin
- writeln('Нажмите 1 для создания файла');
- writeln('Нажмите 2 для просмотра файла');
- writeln('Нажмите 3 для поиска работников по наименованию цеха');
- writeln('Нажмите 4 для поиска работников по заработку');
- writeln('Нажмите 5 для поиска работников по фамилии');
- writeln('Нажмите 6 для выхода из программы');
- write('Выберите пункт меню меню: ');
- readln(digit);
- case digit of
- 1:Create;
- 2:View;
- 3:FindWorkerManufName;
- 4:FindWorkerIncome;
- 5:FindWorkerSurname;
- 6:exit;
- else
- writeln('Ошибка ввода');
- end;
- end;
- end.
- end.
exitcode=103
Листинг программы
- close(f);
file not open
помогите, уже не один час сижу над этой проблемой.. в самом начале исполнения я ввожу цифру 3, затем название файла, а затем всё крашится.Решение задачи: «File not open»
textual
Листинг программы
- type info=record
- surname, NameManufactory:string;
- salary:integer;
- a,b,c:word;
- end;
- const
- Sa = 237;
- Sb = 412;
- Sc = 196;
- var t:info;
- digit:byte;
- n:string;
- f:text;
- inform:info;
- procedure FindWorkerManufName;
- var s:string;
- begin
- write('Введите название файла: '); readln(n);
- assign(f,n);
- {$I-}
- while ioresult<>0 do
- begin
- writeln('Указанный файл не найден!');
- write('Введите название файла: ');
- readln(n);
- assign(f,n);
- reset(f);
- close(f);
- end;
- reset(f);
- {$I+}
- while not eof(f) do
- begin
- readln(f,inform.surname);
- readln(f,inform.NameManufactory);
- readln(f,inform.a);
- readln(f,inform.b);
- readln(f,inform.c);
- { reset(f);
- close(f);}
- end;
- close(f);
- end;
- begin
- FindWorkerManufName;
- writeln(inform.surname);
- writeln(inform.NameManufactory);
- readln;
- end.
Объяснение кода листинга программы
- Объявление типа данных
info
для записи информации о работнике. - Объявление констант
Sa
,Sb
иSc
для хранения значений цветов. - Объявление переменных
t
,digit
,n
иf
для работы с файлом и ввода данных. - Объявление переменной
inform
типаinfo
для хранения информации о работнике. - Вывод сообщения с просьбой ввести название файла для чтения данных.
- Ввод названия файла и сохранение его в переменную
n
. - Открытие файла с указанным названием для чтения данных.
- Проверка наличия файла и закрытие его при отсутствии.
- Повторное открытие файла после его закрытия из-за отсутствия.
- Чтение информации о работнике из файла и сохранение ее в переменную
inform
. - Закрытие файла после чтения всех данных.
- Вывод информации о работнике на экран.
- Завершение работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д