Форум «Всё о Паскале» _ Теоретические вопросы _ Процедура шалит
Автор: Morfey85 9.04.2006 18:00
Написал подпрограму, рамотает так как надо но как только ставлю ее процедурой выводит кое что лишенее. Немогу понять почему Объясните в чем причина плиз...
Код
uses crt; {Procedure ShowRec;} var A:array[0..20,0..10] of char; fi:text; x,y,j:word; ch:char; begin {ShowRec} clrscr; x:=0;y:=0; assign(fi,'rec.txt'); {$I-} reset(fi); {$I+} repeat read(fi,ch); A[x,y]:=ch; inc(x); if x=20 then begin inc(y); x:=0; end; until eof(fi); while y<>10 do begin A[x,y]:=' '; inc(x); if x=20 then begin inc(y); x:=0; end; end; j:=1; for y:=0 to 9 do begin Write(j,'. ');inc(j); for x:=0 to 20 do begin write(A[x,y]); end; writeln; end; end. {ShowRec} { begin ShowRec; end.}
в файле rec.txt находится следущий текст: Morfey___________123Scorp____________103Zorg______________98Den_________________ __68
Автор: volvo 9.04.2006 18:15
Цитата(Morfey85 @ 9.04.2006 14:00)
Объясните в чем причина плиз...
Все просто: в случае, когда ты работаешь БЕЗ процедуры, у тебя все переменные являются ГЛОБАЛЬНЫМИ. А глобальные переменные компилятор обнуляет...
Как только ты оформляешь процедуру - переменные становятся ЛОКАЛЬНЫМИ. Компилятор с ними ничего сделать не может, ибо во время компиляции их просто не существует - память под них выделяется в стеке во время выполнения программы, когда управление передается процедуре. И, естественно, в переменных находится мусор. Все переменные, кроме A ты обнуляешь? Обнуляй и массив тоже:
Procedure ShowRec; var A:array[0..20,0..10] of char; fi:text; x,y,j:word; ch:char; begin {ShowRec} clrscr; FillChar(A, sizeof(A), ' '); { Заполняем весь массив пробелами } x:=0;y:=0; ... { дальше - все как и было }