QBasic/附录
N = ABS(expression returning a numerical value)
返回表达式的“绝对”值,将负数转换为正数(例如 -4 转换为 4)
PRINT ABS(54.345) 'This will print the value ABS now as it is (54.345)
PRINT ABS(-43) 'This will print the value as (43)
.
OPEN "file.txt" FOR APPEND ACCESS WRITE
这将设置已声明到程序中的文件的访问权限。程序员可以设置三种设置。这些是
READ - Sets up the file to be read only, no writing. WRITE - Writes only to the file. Cannot be read. READ WRITE - Sets the file to both of the settings above.
FOR APPEND 将文件打开为文本文件并将文件指针设置为文件末尾,从而将新的输出追加到文件中。如果省略,则 FOR RANDOM 为默认值,它将文件打开为一系列固定长度的记录并将文件指针设置为文件开头。新数据将覆盖文件中现有的数据,不会发出警告。
PRINT ASC("t") 'Will print 116
打印括号中找到的字符的 ASCII 代码号。如果程序员在括号中输入了字符串,则只会显示字符串的第一个字符。
ATN(expression)
内置三角函数的一部分。求值为数字值的表达式将转换为其反正切。
angle = ATN( B ) angle2 = ATN( 23 / 34 )
BEEP
主板上的 BIOS 被指示从 PC“扬声器”发出“哔”声。另请参见 SOUND 和 PLAY。
一个更旧、过时的替代方法是使用 : PRINT CHR$(07)
这后来被 BEEP 命令取代。
BLOAD file_path$, memory_offset%
将使用 BSAVE 保存的文件加载到内存中。
- file_path$ 是文件位置
- memory_offset 是一个整数,指定要加载文件的内存偏移量
起始内存地址由偏移量和最近一次对 DEF SEG 语句的调用决定
BSAVE file_path$, memory_offset%, length&
将内存区域的内容保存到可以使用 BLOAD 加载的文件中
- file_path$ 是文件位置
- memory_offset 是一个整数,指定要保存的内存偏移量
- length 要复制的字节数
起始内存地址由偏移量和最近一次对 DEF SEG 语句的调用决定
CALL ABSOLUTE([argument%, ...,] address%)
将提供的参数(必须为 INTEGER)从左到右压入堆栈,然后对位于 address 的汇编语言例程进行远调用。要使用的代码段使用 DEF SEG 设置。通常,QBasic 将压入参数的地址,但是如果参数前面有 BYVAL,则将压入参数的值。
请注意,由于 QBasic 从左到右压入参数,因此如果您例如为三个参数提供三个参数,堆栈将如下所示
SS:SP Return IP +0002 Return CS +0004 Argument 3 +0006 Argument 2 +0008 Argument 1
示例
'POP CX 'POP DX 'POP BX 'POP AX 'MOV [BX], AX 'PUSH DX 'PUSH CX 'RETF A$ = "YZ[Xë•RQ╦" 'Codepage: 437 I% = 42: J% = 0 IF VARSEG(A$) <> VARSEG(J%) THEN STOP 'Both A$ and J% are stored in DGROUP. DEF SEG = VARSEG(A$) CALL ABSOLUTE(BYVAL I%, J%, PEEK(VARPTR(A$) + 3) * 256& OR PEEK(VARPTR(A$) + 2)) PRINT J%
QBasic 不会将 BP 设置为机器语言例程的堆栈帧,而是让它指向调用 QBasic 过程的堆栈帧,如下所示
-???? Variable 3 -???? Variable 2 -???? Variable 1 -???? Return value (only if the procedure is a FUNCTION, absent if a SUB) -0002 BP of calling procedure SS:BP BP of calling procedure (yes, again) +0002 Six bytes referring back to the calling procedure to use when executing END/EXIT SUB/FUNCTION +0008 Argument 3 +000A Argument 2 +000C Argument 1
用 -/+???? 表示的偏移量将取决于变量的大小和存在、返回值和参数。例如,INTEGER 变量将占用两个字节,而 LONG 变量将占用四个字节。正如人们可能预期的那样,考虑到 QBasic 传递参数的方式,变量按声明的相反顺序存储。与调用机器语言例程时相反,这里的参数将始终是地址。对于按值传递的参数,将在堆栈上分配空间,并将该空间的地址传递给过程。
SELECT CASE expression CASE test1[, test2, ...]: statements [CASE test4[, test5, ...]: statements] [CASE ELSE: statements] END SELECT
执行第一个 CASE 语句后的语句,其中测试匹配表达式。测试可以采用以下形式
expression expression1 TO expression2 IS {<|<=|=|<>|>=|>} expression
这是一个没有 CASE 命令的程序示例,它将不同的路径分配给值
PRINT "1. Print 'path'" PRINT "2. Print 'hello'" PRINT "3. Quit" INPUT "Enter a choice: "; a$ IF a$ = "1" THEN PRINT "path": RUN IF a$ = "2" THEN PRINT "hello": RUN IF a$ <> "3" THEN PRINT "That is not a valid choice.": RUN
这是使用 CASE 命令的程序示例
PRINT "1. Print 'path'" PRINT "2. Print 'hello'" PRINT "3. Quit" INPUT "Enter a choice: "; a$ SELECT CASE a$ CASE "1": PRINT "path": RUN CASE "2": PRINT "hello": RUN CASE IS <> "3": PRINT "That is not a valid choice.": RUN END SELECT
CHAIN filename
这将执行链接到另一个 QBasic 程序。可以使用 CHAIN 语句之前的 COMMON 语句将值传递到另一个程序。请注意,除非第二个程序使用 CHAIN 将执行转移回第一个程序,否则执行不会返回到第一个程序。
CHDIR directoryname
这用于设置工作目录,也称为当前目录。目录名与 DOS 中的声明方式完全相同,不支持长文件名。例如
CHDIR "C:\DOS"
请注意,这不会更改当前驱动器,并且每个驱动器都有自己的工作目录。您可以像这样设置当前驱动器
SHELL "C:"
这将返回 ASCII 代码值的字符串字符符号。
name$ = CHR$([ascii character code])
通常用于将字符“加载”到字符串变量中,当该字符无法键入时(例如 Esc 键或 F{n}(功能键)或 QBASIC 解释器将“识别”并执行的字符。以下四个字符不能出现在 QBasic 字符串文字中
- 0 空:直到行尾的所有字符都将被删除,包括此字符。
- 10 换行符:表示行尾。
- 13 回车符:此字符将被删除。
- 34 引号:表示字符串文字的结尾。
这是一些字符代码的列表 :-
07 Beep (same as BEEP) 08 Backspace 09 Tab 27 Esc 72 Up Arrow 75 Left Arrow 77 Right Arrow 80 Down Arrow
这将把括号中的内容四舍五入到最接近的整数。
PRINT CINT(4573.73994596)
4574
CIRCLE ([X Coordinate], [Y Coordinate]), [Radius], [Colour],[Start],[End],[Aspect]
允许程序员显示一个圆。与所有图形命令一样,它必须与 SCREEN 命令一起使用。
CLEAR
重置所有变量、字符串、数组并关闭所有文件。QBasic 中的重置命令。
CLOSE
关闭所有打开的文件
CLOSE #2
仅关闭以数据流 2 打开的文件。其他文件保持打开状态
CLS
清除活动屏幕。擦除所有文本、图形,将光标重置到左上角(1,1),并将当前背景颜色(必须使用 COLOR 命令设置)应用于整个屏幕。
COLOR [Text Colour], [Background Colour]
这允许您更改下次“打印”到当前输出窗口时使用的文本和背景颜色。可以这样做
COLOR 14, 01 PRINT "Yellow on Blue"
您可以选择十六种颜色
00: Black 08: Dark Grey 01: Dark Blue 09: Light Blue 02: Dark Green 10: Light Green 03: Dark Cyan 11: Light Cyan 04: Dark Red 12: Light Red 05: Dark Purple 13: Magenta 06: Orange Brown 14: Yellow 07: Grey 15: White
这些值是您在 COLOR 命令中输入的数字。
注意,只有屏幕模式 0、7、8、9、10 支持背景颜色。要以背景颜色“重新绘制”整个屏幕,请使用 CLS 命令。
将变量声明为“全局”,这允许跨多个 QBasic 程序/脚本访问其值(另请参见 CHAIN 命令)
COMMON SHARED [variablename]
每个声明 'variablename' 为 COMMON 的程序将共享相同的值。
注意。所有 COMMON 语句必须出现在程序开头(即在任何可执行语句之前)。
修复变量,使其无法在程序中更改。
CONST (name) {AS (type = INTEGER / STRING)} = (expression or value)
例如 :-
CONST PI = 3.14159265
将值 3.14159265 分配给 PI。
CONST PI2 = 2 * PI
必须在使用 PI 计算 PI2 之前为 PI 分配一个值。通常,所有 CONST 都在程序开头声明。
DATA [constant]
与 READ 和 RESTORE 命令一起使用。主要用于处理图形的程序,此命令允许 QBasic 读取大量常数。READ 命令访问数据,而 RESTORE 命令“刷新”数据,允许再次使用它。
一个系统变量,它始终包含当前日期,以 mm-dd-yyyy 格式表示为字符串。像这样使用它
a$ = DATE$
设置当前段地址。
DEG SEG [=address]
- address 是一个段地址,可以包含 0 到 65535 之间的值。
如果省略 address,DEF SEG 会将当前段地址重置为默认数据段。DEF SEG 由 BLOAD、BSAVE、CALL ABSOLUTE、PEEK 和 POKE 使用
_DEST 设置当前写入页面或图像。_DEST image_handle 将目标图像发送到存储在长变量 image_handle 中的句柄图像。_DESt 0 将目标图像发送到当前使用的屏幕。
这用于声明数组(早期版本的 QBasic 要求所有变量都被定义,而不仅仅是大于 10 的数组)
DIM [Array Name] ([count],[count], ..)
数组名称可以是任何类型(Integer、Double、String 等)。如果未声明,则假定为单精度浮点数。字符串可以使用 $ 符号“声明”(整数使用 % 符号)。QBASIC 解释器可以容忍最多 10 个计数的数字数组,而无需声明这些数组。
注意,早期版本的 QBasic 没有明确地将数组的内容设置为零(参见 CLEAR 命令)
DIM table%(100,2)
创建一个名为 table% 的整数数组,包含 100x2 = 200 个条目
DIM form$(5)
创建一个名为 form$ 的字符串数组,包含 5 个字符串
DIM quotient(20) AS DOUBLE
创建一个名为 quotient 的数组,包含 20 个双精度数字
DO [program] LOOP UNTIL [test condition becomes TRUE]
用于在程序中创建循环。[condition] 仅在首次执行 [program] 代码后测试(另请参见 WHILE)。例如
num$ = 1 sum$ = 0 DO sum$ = 2 * num$ PRINT sum$ num$ = num$ + 1 LOOP UNTIL num$ = 13
这不起作用,但以下代码起作用
num = 1 sum = 0 DO sum = 2 * num PRINT sum num = num + 1 LOOP UNTIL num = 13
DRAW "[string expression]"
用于从当前“光标”位置以当前颜色绘制一条直线。DRAW 定义了线的方向(向上、向下等)和长度(以像素为单位)。例如:-
SCREEN 7 PSET (50, 50), 4 DRAW "u50 r50 d50 l50"
每个数字前面的字母是方向
U = Up E = Upper-right D = Down F = Lower-right L = Left G = Lower-left R = Right H = Upper-left
绘图“光标”停留在线段结束的位置。u50 从 50,50 向上绘制,结束于 50,0 r50 从 50,0 向右绘制,结束于 100,0 d50 从 100,0 向下绘制,结束于 100,50 l50 从 100,50 向左绘制,结束于 50,50
因此,显示的示例将绘制一个红色的“线框”正方形。
另请参阅 LINE 和 CIRCLE 命令。
注意:从 0,0 到 100,100 的对角线长为 100 * 根号 2 像素(即 141)
END
表示程序的结束。当 QBasic 看到此命令时,通常会显示一条语句,提示“按任意键继续”。
END TYPE
结束 TYPE 定义。END DEF
结束 DEF FN 函数定义。END SUB
结束 SUB 过程定义。END FUNCTION
结束 FUNCTION 过程定义。END IF
结束多行 IF 块。END SELECT
结束 SELECT CASE 块。
ENVIRON [string expression]
注意:如果您在 Windows 系统上运行 QBasic,则无法使用此命令。
此命令可帮助您在会话期间设置环境变量。退出 QBasic.exe 解释器后,变量将恢复为其原始值。
此命令检查指定文件()中是否还有更多数据值可供读取。EOF() 返回布尔/二进制值,即 1 或 0。如果尚未到达文件末尾,则返回 0;如果已读取文件中的最后一个值,则返回 1(另请参阅 LINE INPUT)。
OPEN File.txt FOR INPUT AS #1 DO INPUT #1, text$ PRINT text$ LOOP UNTIL EOF(1) END
请注意,由于 INPUT 在到达 UNTIL 之前执行,因此 File.txt 必须至少包含一行文本 - 如果文件为空,您将收到“错误 (62) 输入超过文件末尾”错误。
ERASE [arrayname] [,]
用于擦除所有已定义的数组。
系统变量,保存与处理上一行代码相关的数值。如果该行完成且未出现错误,则 ERROR 设置为 0。如果该行失败,则 ERROR 设置为以下所示的值之一。最常用于将程序流重定向到错误处理代码,例如:-
ON ERROR GOTO [line number / label]
如果 ERROR 非零,则程序流跳转到指定的行号或标签。如果 ERROR 为零,则程序流继续执行下一行。
若要手动测试您的程序并检查错误处理例程是否正常运行,可以手动设置 ERROR:-
ERROR [number]
Set ERROR = number
错误号如下所示
1 NEXT without FOR 39 CASE ELSE expected 2 Syntax Error 40 Variable required 3 RETURN without GOSUB 50 FIELD overflow 4 Out of DATA 51 Internal error 5 Illegal function call 52 Bad file name or number 6 Overflow 53 File not found 7 Out of memory 54 Bad file mode 8 Label not defined 55 File already open 9 Subscript out of range 56 FIELD statement active 10 Duplicate definition 57 Device I/O error 11 Division by zero 58 File already exists 12 Illegal in direct mode 59 Bad record length 13 Type mismatch 61 Disk full 14 Out of string space 62 Input past end of file 16 String formula too complex 63 Bad record number 17 Cannot continue 64 Bad file name 18 Function not defined 67 Too many files 19 Yes RESUME 68 Device unavailable 20 RESUME without error 69 Communication-buffer overflow 24 Device timeout 70 Permission denied 25 Device Fault 71 Disk not ready 26 FOR without NEXT 72 Disk-media error 27 Out of paper 73 Advanced feature unavailable 29 WHILE without WEND 74 Rename across disks 30 WEND without WHILE 75 Path/File access error 33 Duplicate label 76 Path not found 35 Subprogram not defined 37 Argument-count mismatch 38 Array not defined
请注意,ERROR 在执行失败时设置,而不是在“读取”代码时设置 - 因此,例如,在将结果分配给不存在的数组变量或写入不存在的文件之前,会发现“除以 0”错误。
允许立即退出子例程或循环,而无需处理该子例程或循环代码的其余部分
EXIT DEF
退出 DEF FN 函数。
EXIT DO
退出 DO 循环,执行继续执行 LOOP 命令后的下一条命令
EXIT FOR
退出 FOR 循环,执行继续执行 NEXT 命令后的下一条命令
EXIT FUNCTION
退出 FUNCTION 过程,执行继续执行函数调用后的下一条命令
EXIT SUB
退出 SUB 过程。
FOR [variable name] = [start value] TO [end value] {STEP n} [program code] NEXT [variable name]
将变量设置为 [起始值],然后执行程序代码,并在 Next 语句处将变量递增 1(或如果指定了 STEP 值,则递增 STEP 值)。将结果值与 [结束值] 进行比较,**如果不相等**,则程序流将返回到 FOR 语句后的下一行。
例如
FOR a = 200 TO 197 STEP-1 PRINT a NEXT a
200 199 198
使用 STEP 时必须小心,因为很可能使用 STEP 值跨越(结束值),从而导致 FOR 循环“永远”运行(即,直到用户中止解释器或发生错误),例如:-
FOR a = 200 TO 197 STEP-2 PRINT a NEXT a
200 198 196 194 192 ... 0 -2 -4 ... -32768 ERROR 溢出
GOSUB [subroutine line number / label]
命令处理跳转到指定的子例程。遇到 RETURN 命令时,处理将返回到此点,并继续执行 GOSUB 后的下一行。
IF [variable or string] [operator] [variable or string] THEN [command] {ELSE [command]}
比较变量或字符串。例如,如果您想检查用户输入的密码是否为正确密码,可以输入
IF a$ = "password" THEN PRINT "密码正确"
其中 a$ 是用户输入的密码。一些运算符包括
"="- 等于
"<"- 小于(仅在变量或字符串为数字值时使用)
">"- 大于(仅在变量或字符串为数字值时使用)
"<>"- 不等于
"<="- 小于或等于(仅在变量或字符串为数字值时使用)
">="- 大于或等于(仅在变量或字符串为数字值时使用)
还可以使用 if 命令对数字值执行操作,然后将它们与其他字符串或变量进行比较,例如以下示例
IF a+5 = 15 THEN PRINT "正确"
IF a*6 = b*8 THEN PRINT "正确"
QUICKBasic 支持通过 $INCLUDE 指令使用包含文件
(Note that the Qbasic interpreter does NOT support this command.)
'$INCLUDE: 'foobar.bi'
请注意,包含指令以撇号、美元符号为前缀,并且包含的文件名称用单引号括起来。
[variable] = INKEY$
当您希望程序使用键盘输入进行操作时,可以使用此命令。查看以下有关此命令工作原理的示例
a$ = INKEY$ PRINT "Press Esc to Exit" END IF a$ = CHR$(27)
可以将此命令与 CHR$ 命令结合使用,或输入字母(例如 A)。
INPUT [String Literal] [,or;] [Variable]
显示字符串文字,如果字符串文字后面跟有分号,则会显示问号,并且用户在按回车键之前输入的内容将输入到变量中。变量可以是字符串或数字。如果用户尝试为数字变量输入字符串,则程序将再次要求输入。字符串文字是可选的。如果使用字符串文字,则需要使用逗号 (,) 或分号 (;)。
INPUT #n [String Literal] [,or;] [Variable]
从指定的 文件流 中读取字符串/值(另请参阅 LINE INPUT #)
INPUT #1, a$, b$, n, m
从以 #1 打开的文件中读取 4 个值。a$ 被分配所有文本,直到遇到 ','(逗号)或行尾,b$ 被分配下一个文本段,然后两个数值被解释并分配给 n 和 m。
请注意,在文件中,数字可以用“任何东西”分隔 - 因此,如果在当前文件“行”上没有找到数字(对于“n”或“m”),将搜索文件的其余部分,直到找到数字。输入然后“指向”文件中的位置,该位置在满足输入语句所需的最后一个数字之后(另请参阅“seek #”命令)。
INSTR (start%, Search$, Find$)
返回 Find$ 在 Search$ 中的第一次出现开始处的字符位置,从 Search$ 中的字符位置 'start%' 开始。如果未找到 Find$,则返回 0。start% 是可选的(默认值为 1,Search$ 的第一个字符)。
Pos = INSTR ("abcdefghi", "de")
返回 4
A$ = LEFT$(B$,N)
A$ 被设置为 B$ 的最左边的 N 个字符。
A$ = LEFT$("Get the start only",6)
返回 "Get th"
另请参阅 RIGHT$()、MID$()。
LET [variable] = [value]
早期的 QBasic.exe 命令解释器需要使用“LET”命令来将值分配给变量。后来的版本不需要。
LET N = 227 / 99 LET A$="a line of simple text"
等同于 -:
N = 227 / 99 A$="a line of simple text"
LINE ([X], [Y]) - ([X], [Y]), [Colour Number]
用于在 QBasic 中绘制线条。第一个 X 和 Y 用作线条起点的坐标,第二个集合用作线条终点的坐标。您必须在程序开头放置一个 SCREEN 命令才能使它工作。
注意。在 SCREEN 13 中,颜色编号 == 调色板编号
LINE INPUT #1, a$
将以文本字符形式从以流 #1 打开的文件中读取完整的一行,并将其放在 a$ 中。
为了找到“行尾”,QBasic 解释器搜索“回车”+“换行”(0x0D、0x0A)字符。当读取在 UNIX/LINUX 系统上创建的文本文件(其中“换行”0x0A 单独用于表示“行尾”)时,LINE INPUT 不会识别“行尾”,并且将继续输入,直到到达文件末尾。对于超过 2k 个字符的文件,结果是“字符串空间不足”错误,因为 a$ “溢出”。一种解决方案是使用能够处理 UNIX 文件的文本编辑器打开并“另存为”,然后再尝试使用 QBasic 处理该文件。
(注意!本节中的命令指的是一个名为“QB64”的第三方程序。QUICKbasic 或 Qbasic 都不支持_LOADIMAGE、_NEWIMAGE 或 _PUTIMAGE 命令。QUICKbasic 和 Qbasic 都有一个“SCREEN”命令,但它在这些语言中的工作方式与 QB64 中不同。)
_LOADIMAGE("image.jpg")
显示图像。必须与 SCREEN、_NEWIMAGE 和 _PUTIMAGE 命令一起使用。
示例
DIM rabbit AS LONG SCREEN _NEWIMAGE(800, 600, 32) rabbit = _LOADIMAGE("rabbit.jpg") _PUTIMAGE (100,100), rabbit
DO [Program] LOOP UNTIL [condition]
用于在程序中创建循环。此命令在循环开始后检查条件。它与 DO 命令一起使用。
LPRINT [statement or variable]
将文本打印到打印机。LPRINT 命令期望打印机连接到 LPT1(PRN) 端口。如果打印机没有连接到 LPT1,QBasic 会显示“设备故障”错误消息。
如果您的打印机连接到 COM 端口而不是 LPT 端口,请使用 MS-DOS MODE 命令将打印从 LPT1 重定向到 COMx(例如,要重定向到 COM1,请使用以下命令
MODE LPT1=COM1
如果您需要在完成后取消重定向,请使用以下命令
MODE LPT1
a$=MID$(string$,start%[,length%]) MID$(string$,start%[,length%])=b$
在第一个使用中,a$ 被设置为从字符串中取出的子字符串,从字符 start% 开始,取 Length% 个字符。如果省略 length% ,则取行的其余部分(即 start% 和所有右侧的字符)。
在第二个使用中,string$ 的 length% 个字符被 b$ 替换,从 start% 开始。如果省略 length% ,则替换行的其余部分(即 start% 和所有右侧的字符)。
另请参阅 LEFT$ RIGHT$ LEN
a MOD b
返回 a 除以 b 的整数除法的余数。
例如,10 MOD 3 返回 1
_NEWIMAGE 用于将长变量设置为屏幕尺寸,或者可以与 SCREEN 命令(请参阅附录的后面部分)一起使用来直接设置屏幕详细信息。它非常有用,因为您可以放大具有 RGB 颜色设置的 SCREEN 模式“13”,如果您发现默认大小太小。
语法:_NEWIMAGE(width,length,screen_mode)
- width 和 length 是长变量,而 screen_mode 是您想要更改的屏幕模式格式。
像,
_NEWIMAGE(1000,1000,24),256
其中,256 是颜色数量
它也用于为要放置的图像(首先使用 LOADIMAGE 加载它)准备窗口屏幕表面。
OPEN "[(path)\8.3 file name.ext]" (FOR {INPUT/OUTPUT} AS #{n})
这将打开一个文件。您必须提供 DOS 文件名,例如
OPEN "data.txt" FOR INPUT AS #1
以数据流 #1 的形式打开现有的文件 data.txt 进行读取。由于没有指定路径,因此该文件必须与 QBasic.exe 位于同一个文件夹中 - 否则,处理将因“找不到文件”错误而停止。
OPEN "C:\TEMP\RUN.LOG" FOR OUTPUT AS #2
以数据流 #2 的形式打开名为 RUN.LOG 的空文件,该文件位于 C:\TEMP 文件夹中。任何同名文件都将被替换。
PALETTE[palette number, required colour]
仅限于 VGA(SCREEN 模式 13),将调色板条目设置为新的 RGB 颜色。调色板编号必须在 1-256 范围内。所需的颜色是从 (required Blue * 65536) + (required Green * 256) + required Red 的总和创建的长整数。
RANDOMIZE TIMER A = INT((RND * 100)) + 1
RANDOMIZE 将为 QBasic 的随机数生成器设置种子。使用 QBasic 时,通常只使用 RANDOMIZE TIMER 来确保序列在每次运行时保持一致。
该示例是一个数学运算,用于从 1 到 100 获取一个随机数。
INT 代表整数,RND 代表随机数," * " 代表随机数的选择范围。 "+ 1" 只是为了确保选择的数字是从 1 到 100,而不是 0 到 99。
注意:后续调用此函数不能保证相同的随机数序列。
READ AIM(I)
与 DATA 命令结合使用,此命令允许 QBasic 读取数据。 这主要用于处理大型数据,如位图。
REM {comments} ' {comments}
当解释器遇到 REM 或 " ' " (单引号) 作为一行的开头时,该行的其余部分将被忽略。
RETURN
表示子程序的结束
RANDOMIZE TIMER A = INT((RND * 100)) + 1
RND 将提供 0 到 1 之间的随机数。
此示例是一个数学运算,用于获取 1 到 100 之间的随机数。 RANDOMIZE TIMER 将初始种子设置为唯一的序列。 INT 代表整数,RND 代表随机数," * " 代表随机数的选择范围。 "+ 1" 只是为了确保选择的数字是从 1 到 100,而不是 0 到 99。
在内部,种子是一个 24 位数,以以下方法迭代:rnd_seed = (rnd_seed*16598013+12820163) MOD 2^24
PLAY "[string expression]"
用于在 PC 扬声器上播放 QBasic 中的音符和乐谱。 音调由字母 A 到 G 表示。 变音符号用 "+" 或 "#" (升调) 或 "-" (降调) 表示,紧跟在音符字母之后。 请参见此示例
PLAY "C C# C C#"
字符串表达式中的空格将被忽略。 还有一些代码用于设置持续时间、八度音阶和速度。 它们不区分大小写。 PLAY 按字符串中出现的顺序执行命令或音符。 任何更改属性的指示器都对该指示器之后的音符有效。
Ln Sets the duration (length) of the notes. The variable n does not indicate an actual duration amount but rather a note type; L1 - whole note, L2 - half note, L4 - quarter note, etc. (L8, L16, L32, L64, ...). By default, n = 4. For triplets and quintets, use L3, L6, L12, ... and L5, L10, L20, ... series respectively. The shorthand notation of length is also provided for a note. For example, "L4 CDE L8 FG L4 AB" can be shortened to "L4 CDE F8G8 AB". F and G play as eighth notes while others play as quarter notes. On Sets the current octave. Valid values for n are 0 through 6. An octave begins with C and ends with B. Remember that C- is equivalent to B. < > Changes the current octave respectively down or up one level. Nn Plays a specified note in the seven-octave range. Valid values are from 0 to 84. (0 is a pause.) Cannot use with sharp and flat. Cannot use with the shorthand notation neither. MN Stand for Music Normal. Note duration is 7/8ths of the length indicated by Ln. It is the default mode. ML Stand for Music Legato. Note duration is full length of that indicated by Ln. MS Stand for Music Staccato. Note duration is 3/4ths of the length indicated by Ln. Pn Causes a silence (pause) for the length of note indicated (same as Ln). Tn Sets the number of "L4"s per minute (tempo). Valid values are from 32 to 255. The default value is T120. . When placed after a note, it causes the duration of the note to be 3/2 of the set duration. This is how to get "dotted" notes. "L4 C#." would play C sharp as a dotted quarter note. It can be used for a pause as well. MB MF Stand for Music Background and Music Foreground. MB places a maximum of 32 notes in the music buffer and plays them while executing other statements. Works very well for games. MF switches the PLAY mode back to normal. Default is MF.
PRINT [Argument] [,or;] [Argument]...
将文本显示到屏幕上。 参数可以是字符串文字、字符串变量、数字文字或数字变量。 所有参数都是可选的。
PRINT #[n] [,or;] [Argument]...
将数据保存到 'OPEN FOR OUTPUT AS #[n]' 的文件中,或者我们可以使用 ? 符号用于打印命令
PSET ([X coordinate],[Y coordinate]), [Pixel Colour]
此命令显示像素,可以一次显示一个像素,也可以一次显示一组像素。 为了使命令生效,程序中必须包含 SCREEN 命令。
SCREEN [Screen Mode Number]
此命令用于在屏幕上显示图形。 根据您想要的解析度,QBasic 中可以使用十种主要类型的屏幕模式。 以下列出了您可以选择的屏幕模式
SCREEN 0:文本模式,不能用于图形。 这是文本程序运行的屏幕模式。
SCREEN 1:320 x 200 分辨率。 四种颜色
SCREEN 2:640 x 200 分辨率。 两种颜色(黑白色)
SCREEN 7:320 x 200 分辨率。 十六种颜色
SCREEN 8:640 x 200 分辨率。 十六种颜色
SCREEN 9:640 x 350 分辨率。 十六种颜色
SCREEN 10:640 x 350 分辨率。 两种颜色(黑白色)
SCREEN 11:640 x 480 分辨率。 两种颜色
SCREEN 12:640 x 480 分辨率。 十六种颜色
SCREEN 13:320 x 200 分辨率。 256 种颜色。 (推荐)
注意。 在 SCREEN 13 中,您有一个包含 256 种颜色的调色板。 调色板由 Windows 预设,但是您可以使用 PALETTE 命令更改 RGB 值。
SEEK #[file number], 1
将 'input #' 指针重新定位到文件的开头。
SGN(expression yielding a numeric value)
生成值的“符号”,如果 < 0 则为 -1,如果为 0 则为 0,如果 > 0 则为 1
'SHELL' 命令用于在 Qbasic 中向命令提示符/Windows Shell 发出命令。 'Shell' 命令与包含任何上述软件都理解的命令的字符串一起使用。 字符串中包含的命令与 MS-DOS 的命令很相似
示例:SHELL 可与 'DIR' 命令一起使用,以在某个文件夹或路径中生成文件目录。
SLEEP [n]
执行暂停 n 秒
SOUND [frequency], [duration]
与 BEEP 命令不同,此命令从 PC 扬声器发出可变频率和持续时间的音频。 频率以赫兹为单位测量,范围为 37 到 32767。 在频率部分输入这些数字中的一个。 持续时间为时钟滴答,默认值为每秒 18.2 滴答。
将数字值转换为文本(字符串)字符
A$ = STR$(expression yielding a numeric value)
数字值将转换为文本字符并放置到 A$ 中。 用于将数字转换为文本字符串。
警告。
1) 如果结果为正数,则会添加一个前导空格 (STR$(123) = " 123" 而不是 "123",正如预期的那样)。 如果结果为负数,则不会用空格替换,而是用 '-' (减号) 替换,即 STR$(-123) = "-123" 而不是 " -123",正如预期的那样 正数的行为。
2) 转换小于 0.1 的浮点数 (mumb!, numb#) 时,字符串值可能会以“科学计数法”呈现,使用“D”而不是“*10^” (例如“5.nnnnnnD-02”而不是“ .05nnnnnn”或“5.nnnnnn*10^-02”)。 只有在需要保留有效数字时才会发生这种情况 (因此 .03000000 呈现为“ .03”,而 .030000001 变成“ 3.0000001D-02”),再次可能不是您所期望的那样。
另请参见 CHR$,用于将 ASCII 值转换为字符串字符。
另请参见 LEFT$、MID$、RIGHT$,用于从一行文本中提取子字符串。
SYSTEM
.bas 退出,QBasic.exe 解释器关闭,'控制' 传递到命令窗口 c:\ 提示符 (或调用 .cmd 脚本的下一行等)。
注意!:这仅在您使用“/run”参数在命令提示符下启动程序时有效! (例如:“Qbasic /run MyProg.bas”) 否则,Qbasic 假设您打开程序是为了进行更改,因此“SYSTEM”会将您带回到编辑器屏幕。
[Command] [variable] = [value] THEN GOTO [line command value]
与 GOTO 或 IF 条件命令结合使用。 它告诉计算机在满足特定条件时该怎么做。
[Command] [Variable] = [Value] TO [Value]
通常用于输入多个变量。
FOR a = 400 TO 500 PRINT a NEXT a
此示例将打印从 400 到 500 的所有数字。我们无需分别声明所有值,而可以一次性全部声明。
USING "format";
用于格式化 PRINT 命令输出的数据。通常情况下,QBasic 解释器会将数字打印为 8 个字符,并在必要时添加前导空格。若要更改此行为,可以使用 USING 命令格式化输出。例如...
IF n > 99 THEN PRINT #1, USING "###"; n; ELSE IF n > 9 AND n<=99
THEN PRINT #1, USING "0##"; n; ELSE PRINT #1, USING "00#"; n;
...将输出从 0 到 999 的 n,并添加前导零。请注意 n 后面的 ';'。这意味着“不换行”,并且会导致下一个 PRINT #1 在逗号 (',') 之后直接添加数据(Qbasic 自动插入逗号而不是换行符)。
name=VAL([variable$])
将 [变量字符串] 的内容转换为数值,以便在计算中使用。如果 (name) 是 INTEGER 类型,则 VAL 向下取整。另请参见 STR$。
A$ = "2"
B$ = "3"
X = VAL(A$) + VAL(B$)
PRINT A$; " + "; B$; " ="; X
WHILE {NOT} [test condition is true] [program code to execute] WEND
测试条件,如果为真(或不为真),则执行 [程序] 代码,直到遇到 WEND,此时控制权返回到 WHILE 行。
WHILE NOT (EOF(1)) LINE INPUT #1, A$ PRINT #2, A$ WEND
当文件 #1 未结束时,读取每行完整内容并将其写入文件 #2。
与 FOR 和 DO 不同,无法从 WHILE 循环中 EXIT。