1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
доброго времени суток! Хотелось бы узнать, почему у меня проверка, котторая стоит в модуле не работает в основной программе.. в частности проверка на наличие файла на диске..
Что значит "не работает"? Все прекрасно работает, запусти программу пошагово и убедись... Другое дело - что ты здесь:
{$I-} err:=main(filename,ret); close (f); { <--- } {$I+} clrscr;
закрываешь файл, который в принципе никогда не может быть открытым, причем делаешь это при {$I-}, и при попытке распечатать результат в Case эта ошибка и выходит наружу...
Что значит "не работает"? Все прекрасно работает, запусти программу пошагово и убедись... Другое дело - что ты здесь:
{$I-} err:=main(filename,ret); close (f); { <--- } {$I+} clrscr;
закрываешь файл, который в принципе никогда не может быть открытым, причем делаешь это при {$I-}, и при попытке распечатать результат в Case эта ошибка и выходит наружу...
т.е. в принципе загвоздка в том что нужно в модуле файл закрывать. так???
Добавлено через 3 мин. кстати, если при контроль ошибок не выключать, а проверку на IOResult <>0 ставить, то в принципе работать будет???
принципе загвоздка в том что нужно в модуле файл закрывать.
Да... Дело-то все в том, что в модуле ты работаешь с локально описанным файлом, который никак не связан с тем, который описан глобально в основной программе...
Цитата
если при контроль ошибок не выключать, а проверку на IOResult <>0 ставить, то в принципе работать будет???
Нет... Тогда сразу при возникновении ошибки программа прервется. {$I-} маскирует ошибку, чтобы ее можно было проанализировать...
Да... Дело-то все в том, что в модуле ты работаешь с локально описанным файлом, который никак не связан с тем, который описан глобально в основной программе...
это понятно. спасибо..
Цитата(volvo @ 3.03.2007 23:12)
Нет... Тогда сразу при возникновении ошибки программа прервется. {$I-} маскирует ошибку, чтобы ее можно было проанализировать...
Ты не учитываешь одну очень незначительную деталь:
Цитата(TP Help - IOResult)
I/O-checking must be off--{$I-}--to trap I/O errors using IOResult. If an I/O error occurs and I/O-checking is off, all subsequent I/O operations are ignored until a call is made to IOResult. A call to IOResult clears the internal error flag.
То есть здесь:
until ioresult=0; { <--- }
IOResult уже как раз = 0 (ты уже обращался один раз к IOResult, и его значение после обращения было очищено - сброшено в 0), и ты пытаешься читать из файла, которого нет... Решение:
repeat
writeln('file name: '); readln(name); {$I-} assign(f1,name); reset(f1); {$I+} IOR := ioresult; if ior<>0 then begin clrscr; writeln('file not found'); end; writeln;
Нет, так не пойдет... Ты укажи строки, в которых программа работает неверно, а то там у тебя черт ногу сломит - ничего не разберешь...
скорее всего где-то здесь
Cifr[i] := Cifr[i] + 1;
и наверное здесь:
if filesize(f)=0 then main:=-3 {pustoy fail} else begin max:=cifr[0]; for i := 0 to 9 do if Cifr[i] > max then begin max := Cifr[i]; Main := 0; ret := max; end; if max=cifr[0] then main:=-4; {cifirki koroche net}
если честно, не очень понимаю, как это здесь делается.. и для чего вообще нужен массив Cifr ....препод написал, а доступно объяснить ему было не судьба...