回 帖 发 新 帖 刷新版面

主题:文件写入的问题

程序:
    随机产生M*N个(M,N由键盘输入)介于[10,9999]之间的整数存入二维数组A(M,N)中,然后对二维数组A按行排序,要求每一行上的数按升序排列,再删除二维数组A中第一列上的所有元素,并按M行,N-1列的形式输出二维数组A并放入顺序文件 sx.dat中。请编制程序。

回复列表 (共3个回复)

沙发

我对此程序困惑的地方是写文件的地方,先把文件的程序的前面部分编写如下,请大家帮我分析一下:
cls
input m,n
dim a(m,n)
for i=1 to m
  for j=1 to n
  a(i,j)=int(rnd*9990)+10
  print a(i,j);
next j
print
next i

for i=1 to m
  for j=1 to n-1
    for k=j+1 to n
      if a(i,j)>a(i,k) then swap a(i,j),a(i,k)
next k,j,i
for i=1 to m
  for j=1 to n-1
     print a(i,j);
  next j
  print
next i

for i=1 to m
  for j=1 to n-1
    a(i,j)=a(i,j+1)
  next j,i

open "sx.dat" for output as #1 
  
'此处我有困惑

close #1
end 

我对最后一段程序觉得有困惑:
比如m=3,n=4的话,可以这样,open "sx.dat" for output as #1 
for i=1 to 3
    write #1,a(i,1);a(i,2);a(i,3);a(i,4)
next i  
close #1
    当m,n为已确定时,可按记录的顺序一条条放进数据文件,而如果m,n是由键盘不确定的数时,写入语句变成了write #1,a(i,1);a(i,2);……a(i,n)显然不能这样列举了,如果这样:
open "sx.dat" for output as #1 
for i=1 to m
for j=1 to n-1    
  write #1,a(i,j)
next i,j
则会出现数据每个元素为一个记录,而不是矩阵的每一行为记录输入数据了,请高手指点名津?
  
close #1
那如何实现把一条条的记录放到数据文件中呢。



板凳

近年来我已经很少使用 Write 了
能用 Print 轻易解决的, Why Not?

for i=1 to m
    for j=1 to n-1    
        print #1,a(i,j),    '注意结尾的逗号
    next
    print #1,               '这里只有逗号,但没有参数,也就是换行的意思.
next i,j

3 楼

我尝试了你的方法,输出的数据文件也很正确,
不知道为什么write语句为什么不行.
如果改成如下:
for i=1 to m
    for j=1 to n-1    
        write #1,a(i,j),
    next
    write #1,
next i,j
程序运行时提示出错,如果去掉 write #1,a(i,j),后边的逗号,则不提示出错,但输出的数据文件不能为矩阵形式的输出了.
这也许是因为write #语句在存储每条记录时,在记录的最后都有个回车符和换行符,不允许加逗号可能是这个原因吧.

我来回复

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