回 帖 发 新 帖 刷新版面

主题:求助:关于EOF 和DO LOOP 结合使用的问题

OPEN "ME.DAT" FOR INPUT AS #1
OPEN "TEMP.DAT" FOR OUTPUT AS #2
CLS
10
DO UNTIL EOF(1)
INPUT #1, M, D, WK, T1, T2, T, OT, WT, MS, NS
PRINT  M, D, WK, T1, T2, T, OT, WT, MS, NS
INPUT "CHANGE RECORD Y/N"; CH$
IF UCASE$(CH$) = "Y" THEN
  INPUT  M, D, WK, T1, T2, T, OT, WT, MS, NS
  INPUT "PRESS N TO CANCLE >"; CN$
    IF UCASE$(CN$) = "N" THEN
       GOTO 10
         ELSE
           WRITE #2,M, D, T1, T2, T, OT, WT, MS, NS
             END IF
END IF
LOOP
CLOSE 
KILL "ME.DAT"
NAME "TEMP.DAT" AS "ME.DAT"
END
为什么会提示DO 语句是BAD FILE NAME OR NUMBER啊?
但是去掉UNTIL EOF(1)它又能运行,但无法测尾了.
还有,当我用DO UNTIL EOF() LOOP读取文件PRINT时,要EOF(3)时才能正常运行,
取0或1都会提示BAD FILE NAME OR NUMBER,什么原因啊?
有时用OPEN "TEMP.DAT" FOR OUTPUT AS #1建立新文件时,程序很小时能在文件夹里找到TEMP.DAT文件,程序多了几行语句后却没有TEMP.DAT文件,但读取打印时TEMP.DAT文件里的资料也有,就是没有发现它.

回复列表 (共4个回复)

沙发

data segment
str db 'dude$'
data ends
code segment
assume cs:code,ds:data
start:
main proc
mov ax,data
mov ds,ax
lea dx,str
mov ah,9h
int 21h
mov ah,4ch
int 21h
main endp
code ends
end start

板凳

首先说说 Eof( ) 函数

在QB里,对文件操作是使用文件号来操作的,
必须使用文件号来打开某个文件,
然后再对文件号来获得有关文件读写的操作.
关闭后文件号就失效了.

在使用 Eof(1) 函数时
[color=FF00FF]BAD FILE NAME OR NUMBER[/color]
说明这个文件号无效,并没有使用文件号1打开的文件
也许是因为你要打开的文件根本不存在.但在open的时候就出错了.

[color=FF00FF]要EOF(3)时才能正常运行,[/color]
这说明了打开了某个文件,使用了文件号3

在你的程序里,并没有发现有使用文件3打开的文件,不知道是不是在立即窗口里打开的.
在QB里,其实是可以在不同的文件号不同的方式来打开同一个文件的,
至于如何解决冲突这个问题我解释不了,因为我没敢尝试.

严格来说,你那一句 goto 实在有点危险,
骤看上去,我还担心会不会把DO坎套循环了呢,(事实上并没有多重的DO,而是同一圈DO循环)

3 楼

多谢moz解答,总算是把它弄明白了。看百遍教材,还不如听君一席话!只有在偷懒的时间才用goto!

4 楼

GOTO有时在跳出多重循环比较方便,或者是需要重做的语句

我来回复

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