Menu Pascal程序不显示完整输出

Menu Pascal程序不显示完整输出,menu,scroll,console,output,pascal,Menu,Scroll,Console,Output,Pascal,我的学校作业是用pascal创建一个类似菜单的程序,显示其他程序的代码。它逐行读取文件中的文本并将其打印到控制台。当它没有显示完整的输出时,它工作得很好。这是它显示的输出: 当它运行时,它会逐行显示所有内容,但在最后,您只能看到控制台窗口中的代码部分,无法向上滚动。谁能告诉我怎么解决这个问题吗?这将是非常受欢迎的。 以下是实际代码: program pascalMenu //ime na programata {$mode objfpc};//OOP pascal ili nesht

我的学校作业是用pascal创建一个类似菜单的程序,显示其他程序的代码。它逐行读取文件中的文本并将其打印到控制台。当它没有显示完整的输出时,它工作得很好。这是它显示的输出:

当它运行时,它会逐行显示所有内容,但在最后,您只能看到控制台窗口中的代码部分,无法向上滚动。谁能告诉我怎么解决这个问题吗?这将是非常受欢迎的。 以下是实际代码:

    program pascalMenu  //ime na programata
{$mode objfpc};//OOP pascal ili neshto takova(zaduljitelno e)
uses sysutils,
 crt, graph;
Var choice : array[1..5] of string;//masiv, v sluchaq sadurja chas ot imenata na failovete
programFile : Text;//shte sudurja imeto na faila
userFile,line,number,filename : string;
i,j,value : integer;
c : char;
begin
        writeln('This program will open all of our previous tasks.');

        //pulnene na masiva
        for i := 1 to 5 do
        begin
                str(i,number);
                choice[i] := 'program' + number;
        end;
        j:=1;

        repeat
        writeln( 'Use the arrow keys to navigate, ENTER to open and ESC to close.');


        //pokazvane na elementite v masiva sled vsqka vrutka na cikula
        for i:= 1 to 5 do
           begin
              if i = j then
              begin
                //tva e za cveta
                 textcolor(red);
                 writeln(choice[i]);
                 textcolor(white);
                 continue;
              end;
              writeln(choice[i]);

           end;

        //beggining the menu loop

        c := readkey;//chetene na kopche rofl
        clrscr;// - chisti konzolata(optional)
        if ord(c) = 0 then
        c := readkey;
        value := ord(c);
        //options
        case value of
        72 :
                begin
                j:= j - 1;
                if j < 1 then j :=5;
                end;
        80:
                begin
                j:= j + 1;
                if j > 5 then j:= 1;
                end;
        13:
                begin
                str(j,number);
                filename := 'program' + number + '.txt';
                assignfile(programFile,filename);//prilaga imeto na faila na promenlivata
                //tva nz za kakvo e, obache sled 5-q opit reshi, che bez nego nemoje
                try
                reset(programFile);//otvarq faila za chetene

                repeat

                        readln(programFile, line);//chete 1 red ot faila v line
                        writeln(line);
                until (Eof(programFile));//eof - end of file
                closefile(programFile);//zaduljitelno!! bez nego ne mogat dase otvarqt 2/poveche faila
                                        //zaradi greshka v read/write dostupa
                except on E:EInOutError do begin
                writeln('The program could not read the file. Check the file''''s''name and directory.');end;
                end;

                writeln('Press any key to return to the main menu.');
                writeln('P.S. - This will erase the text');
                readln;
                clrscr;
                end;
        end;
        until value =27;


end.
program pascalMenu//ime na ProgramData
{$modeobjfpc}//OOP pascal ili neshto takova(zaduljitelno e)
使用sysutils,
阴极射线管,图形;
变量选择:字符串的数组[1..5]//马西夫,v斯鲁查克·萨杜尔加·查斯和伊梅纳塔·法洛维特
程序文件:文本//我不知道该怎么办
userFile,line,number,filename:string;
i、 j,值:整数;
c:半焦;
开始
writeln('此程序将打开我们以前的所有任务');
//马西瓦普勒内酒店
对于i:=1到5 do
开始
str(i,编号);
选项[i]:=“程序”+编号;
终止
j:=1;
重复
writeln('使用箭头键导航,ENTER键打开,ESC键关闭');
//pokazvane na elementite v masiva雪橇vsqka vrutka na cikula
对于i:=1到5 do
开始
如果i=j,那么
开始
//tva e za cveta
文本颜色(红色);
书面(选择[i]);
文本颜色(白色);
持续
终止
书面(选择[i]);
终止
//搜索菜单循环
c:=readkey//切特内纳科普切罗夫酒店
clrsc;//-chisti konzolata(可选)
如果ord(c)=0,则
c:=readkey;
值:=ord(c);
//选择权
案例价值
72 :
开始
j:=j-1;
如果j<1,则j:=5;
终止
80:
开始
j:=j+1;
如果j>5,则j:=1;
终止
13:
开始
str(j,数字);
文件名:='程序'+number+'.txt';
赋值文件(程序文件,文件名)//我不知道该怎么做
//tva nz za kakvo e,obache sled 5-q opit reshi,che bez nemoje
尝试
重置(程序文件)//奥特瓦克·法利亚·扎切特内酒店
重复
readln(程序文件,行)//切特1号红色ot故障v线
写(行);
直到(Eof(程序文件))//eof-文件结束
关闭文件(程序文件)//扎杜尔吉特尔诺!!这是第二次世界大战
//zaradi greshka v读/写dostupa
除了在E:ei上,恐怖开始了
writeln('程序无法读取文件。请检查文件名和目录');终止
终止
writeln('按任意键返回主菜单');
writeln('P.S.-这将删除文本');
readln;
clrsc;
终止
终止
直到值=27;
终止

使用单位Crt禁止滚动。不用它

或者看看FPC附带的“lister”演示,它尝试了一些相同的功能(光标移动以进行选择和显示)