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
. - Закрытие файла после чтения всех данных.
- Вывод информации о работнике на экран.
- Завершение работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д