Помощь - Поиск - Пользователи - Календарь
Полная версия: Помогите найти ошибку
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Yarche
Довольно простая программа, но тем не менее ошибку найти не могу.
Когда пытаюсь открыть файл для дозаписи в конец файла выдает:"Error 63: Invalid file type". В чем может быть ошибка? unsure.gif
Код
Program studentdata;
const
N = 3;
type
tstudent = record
name: string;
result: byte;
end;
text = file of tstudent;
var
f: text;
i: integer;
man: tstudent;
begin
assign (f, 'C:\pascal\pascal1\readme.doc');
append (f);
For i:= 1 to N do
begin
write ('‚Введите имя: ');
readln(man.name);
write('‚Введите оценку: ');
readln (man.result);
writeln(f, man);
end;
close (f);
reset(f);
i:= 0;
while not EOF (f) do
begin
readln ( man.result);
if man.result = 5 then
i:= i+1;
end;
writeln( 'Число отличников: ',i);
close (f);
end.
volvo
Yarche,
Цитата
В чем может быть ошибка?
Да не может быть, а есть... Каким образом ты собрался типизированный файл открывать процедурой Append? Это возможно только для текстовых файлов...

Чтобы открыть типизированный файл на дозапись в конец, делай:
Reset(f);
Seek(f, FileSize(f));


Кстати, и на ReadLn/WriteLn ты тоже получишь ошибку. Для File Of ... допустимо только Read/Write...
Guest
Спасибо. Ошибок больше не обнаружил.
Исправил Readln/writeln на read/write, но судя по всему он не записывает в файл. Поэтому где-то есть еще ошибка(и) smile.gif
З.Ы.: работой с файлами в Паскале занялся недавно, так что пока многое не понятно...
volvo
Не знаю, не знаю, у меня вот это отработало прекрасно:
Program studentdata;
const
N = 3;
type
tstudent = record
name: string;
result: byte;
end;
text = file of tstudent;

var
f: text;
i: integer;
man: tstudent;

begin
assign (f, 'readme.doc');

reset(f);
seek(f, filesize(f));
For i:= 1 to N do begin
write('Введите имя: '); readln(man.name);
write('Введите оценку: '); readln (man.result);
write(f, man);
end;

close(f);
reset(f);
i := 0;
while not EOF (f) do begin
read(f, man);
if man.result = 5 then i:= i+1;
end;
writeln( 'Число отличников: ',i);
close (f);
end.
cool.gif
Yarche
Хм...вроде работает, но не совсем так, как хотелось бы. Программа должна записывать в файл имя и оценку (проверив файл я обнаружил, что он пустой).
И она должна считать сколько отличников (т.е. сколько оценок "5" мы ввели), у меня она каким то образом насчитала аж 7 отличников из 3ех возможных. blink.gif Я это имел ввиду. unsure.gif
volvo
Хочешь, я вышлю тебе тот файл, который у меня был создан программой? Я же говорю, что работает. Какой компилятор у тебя?

Кстати, а файл ДО запуска программы существовал? Если нет, то вообще будет сбой, если ДА, то какой у него был размер?
Yarche
Borland Turbo Pascal 7.0. Прикрепи пожалуйста файл. wink.gif
volvo
Цитата(Лог работы)
Введите имя: Ivanov
Введите оценку: 3
Введите имя: Petrov
Введите оценку: 4
Введите имя: Sidorov
Введите оценку: 5
Число отличников: 1


Тестировалось на FPC 2.0.0
Вот тот файл, что получился (в архиве):
Yarche
Премного благодарен give_rose.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.