在 QBasic 中的用户定义类型中使用数组
Use an array in a user-defined TYPE in QBasic
我正在尝试学习 QBasic 以在 Amstrad Alt-286 上进行编程。在我的一个程序中,我使用了几种用户定义的类型,有时是 TYPE 数组。在其中一些中,我想声明一个这样的数组:
TYPE TestType
dataArray AS STRING * 4 'Since "dataArray AS _BYTE * 4" doesn't work (wrong syntax compiler says).
END TYPE
然后我这样声明我的类型:
DIM customType(2) AS TestType
一旦我想像这样在我的类型的 dataArray 中写入:
customType(1).dataArray(2) = 3
编译器告诉我这是一个无效语法。
那么,如何在定义的TYPE中存储一个数组呢?
以及如何使用它?
这里有两个问题。在 QB64 中,您根本无法将数组放入用户定义的类型中。根据 QB64 Wiki 的 article on TYPE definitions:
TYPE definitions cannot contain Array variables! Arrays can be DIMensioned as a TYPE definition.
除此之外,您的 dataArray(声明为 dataArray AS STRING * 4
)根本没有声明数组,而是声明了一个 4 字符的字符串。这就是当您尝试使用数组语法访问 dataArray 的元素时出现语法错误的原因。您可以声明一个 包含自定义类型 的数组,如下所示:
TYPE TestType
dataElement AS _BYTE
END TYPE
DIM CustomType(4) AS TestType
CustomType(1).dataElement = 3
这声明了一个类型为 TestType 的 4 元素数组,每个元素包含一个类型为 _BYTE 的变量。这与您尝试做的事情尽可能接近。祝你好运!
你想要的代码是这样的:
虽然您不能在 QB1.1、QB4.5 或 QB64 中执行此操作,但您可以在称为 QB7.1(BC7/PDS) 和 VBDOS(v1. 00):
TYPE testtype
dataArray(4) AS INTEGER
END TYPE
DIM customtype(10) AS testtype
customtype(1).dataArray(2) = 3
否则你可以这样压缩变量:
TYPE testtype
dataArray AS STRING * 8
END TYPE
DIM customtype(10) AS testtype
A = 10: B = 12: C = 14: D = 16
' compress variables into structure
element1$ = MKI$(A) + MKI$(B) + MKI$(C) + MKI$(D)
customtype(1).dataArray = element1$ ' store
' extract variables from structure
element2$ = customtype(1).dataArray ' get
E = CVI(MID$(element2$, 1, 2))
F = CVI(MID$(element2$, 3, 2))
G = CVI(MID$(element2$, 5, 2))
H = CVI(MID$(element2$, 7, 2))
PRINT E, F, G, H
我正在尝试学习 QBasic 以在 Amstrad Alt-286 上进行编程。在我的一个程序中,我使用了几种用户定义的类型,有时是 TYPE 数组。在其中一些中,我想声明一个这样的数组:
TYPE TestType
dataArray AS STRING * 4 'Since "dataArray AS _BYTE * 4" doesn't work (wrong syntax compiler says).
END TYPE
然后我这样声明我的类型:
DIM customType(2) AS TestType
一旦我想像这样在我的类型的 dataArray 中写入:
customType(1).dataArray(2) = 3
编译器告诉我这是一个无效语法。
那么,如何在定义的TYPE中存储一个数组呢? 以及如何使用它?
这里有两个问题。在 QB64 中,您根本无法将数组放入用户定义的类型中。根据 QB64 Wiki 的 article on TYPE definitions:
TYPE definitions cannot contain Array variables! Arrays can be DIMensioned as a TYPE definition.
除此之外,您的 dataArray(声明为 dataArray AS STRING * 4
)根本没有声明数组,而是声明了一个 4 字符的字符串。这就是当您尝试使用数组语法访问 dataArray 的元素时出现语法错误的原因。您可以声明一个 包含自定义类型 的数组,如下所示:
TYPE TestType
dataElement AS _BYTE
END TYPE
DIM CustomType(4) AS TestType
CustomType(1).dataElement = 3
这声明了一个类型为 TestType 的 4 元素数组,每个元素包含一个类型为 _BYTE 的变量。这与您尝试做的事情尽可能接近。祝你好运!
你想要的代码是这样的:
虽然您不能在 QB1.1、QB4.5 或 QB64 中执行此操作,但您可以在称为 QB7.1(BC7/PDS) 和 VBDOS(v1. 00):
TYPE testtype
dataArray(4) AS INTEGER
END TYPE
DIM customtype(10) AS testtype
customtype(1).dataArray(2) = 3
否则你可以这样压缩变量:
TYPE testtype
dataArray AS STRING * 8
END TYPE
DIM customtype(10) AS testtype
A = 10: B = 12: C = 14: D = 16
' compress variables into structure
element1$ = MKI$(A) + MKI$(B) + MKI$(C) + MKI$(D)
customtype(1).dataArray = element1$ ' store
' extract variables from structure
element2$ = customtype(1).dataArray ' get
E = CVI(MID$(element2$, 1, 2))
F = CVI(MID$(element2$, 3, 2))
G = CVI(MID$(element2$, 5, 2))
H = CVI(MID$(element2$, 7, 2))
PRINT E, F, G, H