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

Pascal收银程序出现Range check error错误,请求排查问题

Pascal收银程序Range Check Error问题排查

错误原因

你遇到的Range check error核心原因是变量y在每次循环中持续自增,而gotoxy函数的行参数不能超过终端屏幕的最大行数(默认通常为25行)。当y的值超出屏幕可用行数范围时,就会触发越界错误。

此外还有两个潜在问题:

  • 若直接回车输入空的kode,jumlah的输入步骤会被跳过,但jumlah会保留之前的残留值,可能导致计算异常
  • 未处理用户输入非整数到jumlah的情况,会触发输入格式错误

修复后的代码

uses
  crt;

var
  harga, jumlah, total, totalCost: integer;
  nama, kode: string;
  y : integer = 3;
  maxScreenRows: integer; // 存储屏幕最大行数

begin
  clrscr;
  maxScreenRows := screenheight; // 获取当前屏幕的实际行数
  repeat
    gotoxy(50, 1); write('TOKO AMANAH MURAH');
    gotoxy(50, 3); write('Nama Item        | Jumlah Barang | Total');
    gotoxy(1,4);write('Kode barang   : ');readln(kode);
    
    // 输入空kode时直接退出循环,避免后续错误
    if kode = '' then
      break;
      
    gotoxy(1,5);write('Jumlah barang : ');
    // 处理非整数输入,循环直到输入有效
    while not TryStrToInt(readln, jumlah) do
    begin
      gotoxy(1,6); write('输入无效,请输入数字!');
      gotoxy(1,5); write('Jumlah barang : ');
    end;
    gotoxy(1,6); write(' '); // 清除错误提示

    if kode = 'susu' then
    begin
      nama := 'SUSU KOTAK';
      harga := 2000;
    end
    else if kode = 'kopi' then
    begin
      nama := 'Kopi Cair' ;
      harga := 3000;
    end
    else
    begin
      nama:= 'Invalid';
      harga := 0;
    end;

    total := harga * jumlah;
    totalCost := totalCost + total;
    
    // 检查y是否超过屏幕最大行数,超过则重置到列表起始行
    y := y + 1;
    if y >= maxScreenRows - 1 then // 留一行固定显示总计
      y := 4;
      
    gotoxy(50, y); write(nama , ' | ' , jumlah , ' | Rp' , total);
    gotoxy(50, maxScreenRows - 1); write('Total: Rp', totalCost);
  until kode = '';
end.

关键修复点

  • 通过screenheight获取屏幕实际行数,当y接近屏幕底部时重置到列表起始行,避免gotoxy行参数越界
  • 提前判断空kode并直接退出循环,跳过jumlah输入步骤,避免使用残留值
  • 用TryStrToInt处理jumlah的非整数输入,避免输入格式错误
  • 将总计固定显示在屏幕倒数第二行,防止被滚动的列表覆盖

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 14:53:25