You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何借助CRT取消防滚动?CRT生成随机数无法查看全部输出求解

Hey there! Let's break down your two CRT-related questions and fix those issues for you.

1. 如何取消CRT的自动滚动功能?

CRT的自动滚动是因为输出内容超出了当前定义的窗口范围,要禁用它有两种常用方法:

  • 方法一:锁定全屏窗口(通用兼容)
    使用CRT单元的Window函数,把输出窗口设置为整个屏幕的大小。这样当内容输出到最后一行时,就不会触发自动滚动了。代码示例:

    uses CRT;
    
    begin
      InitCRT; // 初始化CRT环境
      // 设置窗口为全屏:参数依次是左、上、右、下坐标
      Window(1, 1, ScreenWidth, ScreenHeight);
      // 后续的输出就不会自动滚动啦
    end.
    
  • 方法二:调用NoScroll过程(部分CRT版本支持)
    有些CRT实现提供了直接禁用滚动的NoScroll过程,调用后就能直接关闭自动滚动:

    uses CRT;
    
    begin
      InitCRT;
      NoScroll; // 一键禁用滚动
    end.
    
2. 解决随机数生成异常与输出无法查看全部结果的问题

先指出你代码里的一个关键错误:你把randomize;放在了循环内部!randomize是用来初始化随机数种子的,每次调用都会基于当前系统时间重置种子。循环执行速度非常快,系统时间来不及变化,这会导致生成的随机数大量重复,完全达不到你想要的“不重复随机数”效果。

第一步:修正随机数生成代码

把randomize;移到循环外面,只初始化一次就够了:

type
  TPerson = record
    Address: string;
    Phonenum: string;
    licence: string;
    tickets: Integer;
    age: Integer;
  end;

var
  x: Integer;
  people: array[1..100] of TPerson;
begin
  Randomize; // 只在程序开头调用一次!
  For x := 1 to 100 Do With people[x] Do Begin
    Address:='4562 South abigail lane';
    Phonenum:='555-555-1234';
    licence:='ABC3456789';
    tickets:=random(5);
    age:=16 + Random(80); // 补全age的赋值,比如生成16到95岁的随机年龄
    // 输出当前人员信息
    Writeln('Person ', x, ': Tickets=', tickets, ', Age=', age);
  End;
end;

第二步:解决输出无法查看全部的问题

100条输出很容易超出CRT屏幕的显示范围,或者因为输出太快导致前面的内容被覆盖,这里给你两个实用方案:

  • 方案一:分屏暂停输出
    每输出固定行数(比如20行)就暂停,让你按任意键继续查看下一页,避免内容被冲掉:

    For x := 1 to 100 Do With people[x] Do Begin
      // ... 你的赋值代码 ...
      Writeln('Person ', x, ': Tickets=', tickets, ', Age=', age);
      // 每20行暂停一次
      If x Mod 20 = 0 Then Begin
        Writeln('Press any key to continue...');
        ReadKey;
        ClrScr; // 可选:清屏后显示下一页内容
      End;
    End;
    
  • 方案二:将输出写入文件(推荐)
    比起在屏幕上查看,把所有结果写入文件可以完整保存数据,随时打开查看。代码示例:

    var
      OutputFile: Text;
    begin
      Assign(OutputFile, 'people_data.txt');
      Rewrite(OutputFile); // 创建或覆盖文件
      Randomize;
      For x := 1 to 100 Do With people[x] Do Begin
        // ... 你的赋值代码 ...
        // 同时输出到屏幕和文件
        Writeln('Person ', x, ': Tickets=', tickets, ', Age=', age);
        Writeln(OutputFile, 'Person ', x, ': Tickets=', tickets, ', Age=', age);
      End;
      Close(OutputFile);
      Writeln('All data has been saved to people_data.txt!');
    end;
    

内容的提问来源于stack exchange,提问作者Mark Slayrin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:29:56