| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Object Pascal: кроссплатформенные технологии > файлы |
| Автор: Гость_olja 17.11.2004, 19:41 |
| ПОМОГИТЕ!!! НЕ МОГУ НИЧЕГО ПОНЯТЬ, КАК РЕШИТЬ ДОБАВИТЬ В ФАЙЛ ЗАПИСИ, ЗАПИСЬ, КОТОРУЮ ДОБАВЛЯЮ ВЫВОДИТЬСЯ, А ОСТАЛЬНОЕ КАКЯ-ТО ЕРУНДА. Procedure dobavl(var f:stud); var i,n,q,j:integer; a:spisoktel;b:mas; begin reset(f); writeln(' posle chego dobavit?'); readln(i); j:=i; seek(f,j+1); while not eof (f) do begin read(f,b[i]); i:=i+1; end; seek(f,j+1); write('familija studenta '); readln(a.famil); write('imja studenta '); readln(a.imja); write('otchestvo studenta '); readln(a.otch); write('adres studenta: gorod '); readln(a.adres.gorod); write('dom '); readln(a.adres.dom); write('nomer telefona '); readln(a.adres.nomertel); write(f,a); for q:=j to i do write(f,b[q]); close(f); end; |
| Автор: Dimich 18.11.2004, 17:09 | ||
На первый взгляд вроде как верно, вот только
Кажется лишнюю запись берешь с начала. А вообще решение сложное у тебя - надо попробовать скомпилить пример, попробовать |
| Автор: remax 18.11.2004, 17:21 |
| 1) А какой размер массива b:mas? Т.е. Вы используете статический массив, тип которого определен примерно так mas:array[1..100] of stud; Если число записей в файле больше размера в массиве (в данном случае > 100), то проблемы гарантированы (особенно, если отключена проверка выхода за границы массива) 2) А кто сказал, что тип stud эквивалентен типуspisoktel? А посмотрите, что Вы делаете - записываете в типизированый файл (тип stud) переменную типа spisoktel!!!! А еще, убедитесь, что тип элементов массива совпадает с типом файлов!! |
| Автор: MacTep 18.11.2004, 18:17 | ||
Я тут кое-что похожее наметал. Посмотрите, может поможет!
|
| Автор: Underdark 19.11.2004, 13:31 | ||
| Procedure dobavl(var f:stud); var i,n,q,j:integer; a:spisoktel;b:mas; begin reset(f); writeln(' posle chego dobavit?'); readln(i); j:=i; seek(f,j+1); while not eof (f) do begin read(f,b[i]); i:=i+1; end; seek(f,j+1); write('familija studenta '); readln(a.famil); write('imja studenta '); readln(a.imja); write('otchestvo studenta '); readln(a.otch); write('adres studenta: gorod '); readln(a.adres.gorod); write('dom '); readln(a.adres.dom); write('nomer telefona '); readln(a.adres.nomertel); write(f,a); for q:=j to i do write(f,b[q]); close(f); end; _____ - не забывай, что первая запись в файле seek(f,0)!!! _____ - у тебя выводится на две записи больше, т.к. последняя i - была, когда eof (f)=true, и начинать цикл надо со значения j+1; И действительно...
|