BASIC中的井号符号(#)有什么作用?

3

所以,我在应付学校项目时遇到了困难。我有一段基本代码,它是在PALM上编程的,我需要将其翻译成LabView。因此,我首先将代码翻译成伪代码,但是我以前从未使用过BASIC,所以我在某些行上遇到了麻烦。

到目前为止,我知道:VariableName# = 15,表示变量类型为double,并且它可以用于数字的右侧,以将其转换为double,例如VariableName# = 15#

我的代码中还有这样一行:OPEN "LPT1" FOR OUTPUT AS #1,它打开了在COM1上找到的串行端口,并将其命名为“LPT1”

但是在几行之后,我发现了这个,我不知道它的作用:

225 FOR J = 1 TO 6000: PRINT #1, 40; : NEXT J
226 FOR ZZ = 1 TO S9: PRINT #1, 41; : NEXT ZZ

我知道FOR语句的工作原理,但它应该打印什么?
PS:这是一个太阳定位系统。
编辑:S9在程序开始时被定义为450。
3个回答

2
我认为发生的事情是它在端口上输出40个6000次(有关BASIC文件输出,请参见 link),然后输出41。不确定S9是什么。 LPT1通常是并行端口,COM1是串行端口,因此可能会发生一些问题。
从同一个链接中:

PRINT #

PRINT#命令将数据写入文件-数据写入其编号跟随“#”的文件中。该命令的工作方式类似于PRINT命令,只是信息发送到文件而不是打印到屏幕上。该语句


抱歉,我以为是59。S9在开头被定义为450。 - Galarzaa90

1
第225和226行会输出到#1,该位置映射到打印机1(例如并口和通常的centronics连接器)。
OPEN "LPT1" FOR OUTPUT AS #1

下一个是十进制数40和41分别表示左括号(和右括号)。因此,它会将这些符号格式化并打印到您的打印机上。

所以基本上是打印 ( 6000 次,然后打印 ) 450 次? 找不到原因,这是一段奇怪的代码。 - Galarzaa90
我认为是这样的。它可能适用于在非常特定的打印机型号和纸张尺寸上生成漂亮格式的输出。 - Elliott Frisch
我刚在太阳能追踪器的手册上找到了,40会使太阳能追踪器的高度下降,而41会使其上升,因此它将太阳能追踪器发送到其零位置。谢谢! - Galarzaa90
它正在打印数字40和41,而不是“(”和“)”。 这将是PRINT #1, CHR $(40)PRINT#1,CHR $(41)。 最有可能在每个数字之前有一个空格。 至少微软早期的BASIC实现是这样做的。 如果是正数,则有一个空格,如果是负数,则在那个位置有一个减号。 - BlackJack
@BlackJack 我很有信心(基于勾选标记),我在9年前就正确地认为它只是向太阳能定位系统发送控制命令。LPT1的存在排除了早期的MS BASIC。但如果你对此感兴趣,可以看看这个链接:https://github.com/mist64/msbasic。 - Elliott Frisch
@ElliottFrisch 它发送控制命令,但不是单个字符而是每个PRINT#三个字符。早期的 MS BASIC 就是这样做的 - C64 上的 BASIC 是我的第一种编程语言 - GW-BASIC 也是如此,鉴于所显示的“OPEN”语句和“#”表示“double”类型,它似乎是在使用这里的方言。 - BlackJack

1

所有的print #1只是指从那一点开始输出任何你所做的信息到#1,而在你的情况下是“LPT1”,之后的任何内容都会输出到它,直到出现“Close #1”的短语。

至于S9,我相信它是程序中某处设置的变量。尝试在代码中使用CTRL-F查找程序中的其他地方是否有S9。 如果您正在使用GW-Basic作为解释器,请键入“save“NAME.txt”,a”以获取文本文件。 我唯一能想到的另一个可能是for ZZ = 1 to (无限大)step 9,这是不现实的,但会使它按9计数,直到无法再计数为止。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接