回 帖 发 新 帖 刷新版面

主题:想不通啊,关于print tab 语句(请指教,我加分)

我是初学,请大家指教
上机做题,有一段程序
for n= 1 to 9
 print tab (n*8);n;
next
好理解,1 到 9 各空8,16,24....个空格输出,都在同一行
我将分号去掉,改成
for n= 1 to 9
 print tab (n*8);n
next
也好理解,1到9各空8,16,24....个空格输出,但都不在同一行,在1 到9 行
但我将分号该逗号
for n= 1 to 9
 print tab (n*8);n,
next
奇怪了,列数是1到9,行数是1,2同行,3,4同行,5,6,7,8,9各一行,为什么?
为了验证,我随便输入
  print tab (3);1,tab (14);2,tab (26);3 
      都不在一行
  print tab (3);1,tab (9);2,tab (26);3
       2,3 在 一行
  print tab (3);1,tab (16);2,tab (26);3   
       1,2 在一行
搞不清啊,好象没什么规律。

请大家指教啊。





回复列表 (共7个回复)

沙发

在tab( )设置位置 在 当前光标位置 的前面的时候,会自动换一行再定位.

假如当前光标在40      locate,40
如果tab(39)           print tab(39);1;                会先换一行

假如当前光标在40      locate,40
如果tab(40)           print tab(40);8;                不换行

板凳

我也是初学者,针对你提出的问题,我们共同探讨一下:
    QBASIC程序屏幕一行可以输出80个字符,共分五个区,每区分别占14,14,14,14,24个字符,以这个为依据解答你提出的问题:
    你的问题一:print tab (3);1,tab (14);2,tab (26);3      都不在一行
    解释:print tab(3);1, 将会在屏幕上第一行的第3列输出 1,而1后面的逗号即下面的内容将在第二区即第15列输出。
          而再接着的tab (14);2,  其中的14<15(14为第一区,15为第二区)故换行到第二行的第14列输出 2,而2后面的逗号即下面的内容将在第三区第29列输出。
          而再接着的tab (26);3  其中的26<29(26是第二区,而29是第三区)故换行到第三行的第26列输出3。
          综上,此输出语句应输出三行。
          利用此种方法解释
         问题二print tab (3);1,tab (9);2,tab (26);3应输出二行(2,3同行)。
         问题三print tab (3);1,tab (16);2,tab (26);3 应输出二行(1,2同行)。

            




3 楼

关于你的第三个程序:
首先第9个格子输出1,接着到下一个分区(第15列)输出,而程序接下来要求在17列输出2,17>15,所以在原行输出,光标跳到29列(第三个分区的开始位置)。
然后,程序要求在25列输出3,25<29,所以换行后再输出3,但是要注意的是,换行后光标位置没变(还是29),4*8+1=33>29,4在同行后面输出。
5*8+1=41<43(第四个分区的开始位置),所以输出5时换行再输出(在41列),6*8+1=49<57,再换行,输出6。
由于光标已经在最后一个区,所以输出完6后往后跳的那个分区实际上是下一行的第一区,所以自动换行,这样使7、8、9各占一行。

跟踪程序:

要输出的数    光标位置   输出列(有一个符号位)   判断      处理
    1            1               9                9 > 1    不换行
    2            15              17              17 > 15   不换行
    3            29              25              25 < 29    换行
    4            29              33              33 > 29   不换行
    5            43              41              41 < 43    换行
    6            57              49              49 < 57    换行
    7     下一行1(自动换行)    57              57 > 1    不换行
    8        1(自动换行)       65              65 > 1    不换行
    9        1(自动换行)       73              73 > 1    不换行

输出结果:
      1      2
                     3      4
                                  5
                                         6
                                                7
                                                       8
                                                             9

4 楼

非常感谢各位,其实我自学BASIC,一本书还没看完,周围也没人交流,只有上网,靠网友指导了。书上有些地方说不大清楚,更不要说还有些错的地方。
比如,书上说输出时,一行5个区,每1区14列,14*5=70,又说一行可输出40或80个字符,我就纳闷了,呵呵。现在知道了,其实第5个区是24个空。
有时看半天的书也搞不清,网友几句话点拨一下,就通了。
所以说,学问学问,光埋头苦学,还是不行的,还要多问。
谢谢了!

5 楼

请问
1:print 111111111111,2 (12个1)

2:print "1111111111111",2 (13 个1)
第1输出区不都是占13个字符么,
为什么第一句中,2 输出在30列
第2句中,2输出在第16列?

6 楼

print 数值
的时候,数值前面有一个符号位,如果是正数,那么就是一个空格
数值后面有一个空格的分隔符,以便于与后面的内容分开。

7 楼

谢谢大家,有些东西书上说的不是很细,麻烦大家了。

我来回复

您尚未登录,请登录后再回复。点此登录或注册