Commodore 64版Kyan Pascal编译错误求助:数组下标异常及byte类型问题
问题解决与修正后的代码
错误1:数组索引错误("Too many indices on the closing bracket of a[t]")
Kyan Pascal对标识符大小写不敏感,你的generatedata过程中局部变量A(integer类型)覆盖了全局数组变量a。编译器将代码中的a[t]识别为对整数变量A使用索引操作,这属于非法语法,因此报错。
解决方法:
- 重命名局部变量
A为其他名称(比如idxA),避免与全局数组a冲突; - 同时修正
bubblesort过程中同样的大小写问题:将A[i]、A[j]改为a[i]、a[j],统一用小写a避免混淆。
错误2:不支持byte类型("Type identifier expected")
Kyan Pascal没有内置byte类型,你已经定义的btyp = 1 .. 255子界类型可以直接替代byte;如果需要0-255的范围,只需将子界调整为0 .. 255即可。
额外代码问题修正
原代码中generatedata过程的随机交换逻辑无效:R := a[a];是错误操作,正确的随机交换数组元素逻辑应为交换a[idxA]和a[idxB]的值。
修正后的完整代码
Program sort; Type btyp = 1 .. 255; Var a : array [1..100] of integer; Procedure generatedata; Var t : btyp; idxA, idxB, temp : integer; Begin For t:= 1 to 100 do a[t] := t; For t := 1 to 255 do begin idxA := random * 100 + 1; // 生成1-100的有效数组索引 idxB := random * 100 + 1; temp := a[idxA]; a[idxA] := a[idxB]; a[idxB] := temp; End; End; Procedure bubblesort; Var i,j,k : integer; Begin For i := 1 to 99 do begin for j := i to 100 do begin If a[i] > a[j] then begin k := a[i]; a[i] := a[j]; a[j] := k; End; End; End; End; Procedure showdata; Var i : integer; Begin For i := 1 to 100 do begin Write(a[i]:3,' '); End; End; Begin Write(chr(147)); Generatedata; Bubblesort; Showdata; End.
补充说明:
- 随机数生成时增加
+1,确保索引落在数组1-100的有效范围内; - 统一变量命名风格,彻底避免大小写导致的标识符冲突;
- 修复了冒泡排序中变量大小写错误的问题。
内容的提问来源于stack exchange,提问作者John Guillory
相关产品推荐
相关产品推荐

