2016-12-25 98 views
1

我试图用qbasic做一个简单的登录程序。我使用了3个子模块和1个主模块。代码如下:qbasic-我的代码有什么问题?我没有得到我想要的

DECLARE SUB login() 
DECLARE SUB menu() 
DECLARE SUB REGISTER() 
CLS 
CALL menu 
END 

SUB login 
OPEN "USERPASS.TXT" FOR INPUT AS #2 
CLS 
97 
LOCATE 2, 30: PRINT "LOGIN" 
LOCATE 4, 10: INPUT "PLEASE ENTER CORRECT USERNAME OR PRESS B IF YOU WANT TO GO BACK"; USER$ 
IF UCASE$(USER$) = "B" THEN 
    CLOSE #2 
    CALL menu 
ELSE 
    DO WHILE NOT EOF(2) 
     INPUT #2, U$, p$ 
     IF U$ = USER$ THEN 
      TEMPUSER$ = U$ 
      PASSWORDS$ = p$ 
      EXIT DO 
     END IF 
    LOOP 
END IF 
IF USER$ = TEMPUSER$ THEN 
98 
    PRINT PASSWORDS$ 
    LOCATE 5, 30: INPUT "ENTER PASSWORD OR PRESS B if you want to go back"; password$ 
    IF UCASE$(password$) = "B" THEN 
     GOTO 97 
    ELSE 
     IF password$ = PASSWORDS$ THEN 
      PRINT "HURRAY YOU LOGGED IN"   
     ELSE 
      GOTO 98 
     END IF 
    END IF 
ELSE 
    GOTO 97 
END IF 
CLOSE #2 
END SUB 

SUB menu 
CLS 
23 
LOCATE 2, 30: PRINT "MAIN MENU" 
LOCATE 4, 30: PRINT "1.LOGIN" 
LOCATE 5, 30: PRINT "2.REGISTER" 
LOCATE 6, 30: INPUT "PLEASE! Enter 1 or 2"; a 
IF a = 1 THEN 
    CALL login 
ELSE 
    IF a = 2 THEN 
     CALL REGISTER 
    ELSE 
     CLS 
     GOTO 23 
    END IF 
END IF 
END SUB 

SUB REGISTER 
CLS 
OPEN "userpass.txt" FOR APPEND AS #1 
LOCATE 2, 30: PRINT "REGISTER MENU" 
LOCATE 4, 30: INPUT "ENTER NEW USERNAME"; NEWU$ 
CLS 
LOCATE 4, 30: INPUT "ENTER NEW PASSWORD"; PASSU$ 
WRITE #1, NEWU$, PASSU$ 
END SUB 

一切都是我的愿望,但在子模块登录有些事情是错误的我猜。即使输入正确的密码和用户名,登录按摩也不会进入。但是如果我输入不存在的用户名,它将显示登录信息。请帮忙。提前致谢。

回答

3

你错过了一个END IF匹配ELSEIF UCASE$(USER$) <> "B" THEN(顺便说一句:如果UCASE$(USER$) = "B"是假的,那么UCASE$(USER$) <> "B"是真实的,所以你可以简单地说ELSE那里)。

您可以尝试在一个位缩进更传统的方式:

  • IFELSEIFELSEEND IF匹配是在同一列,并
  • 一切这些语句中缩进几更多的空间。

相同缩进规则可以应用于SELECT CASEWHILE-WENDDO-LOOP,和FOR-NEXT

无论如何,你可能会看到丢失的END IF如果你这样做:

SUB login 
    OPEN "USERPASS.TXT" FOR INPUT AS #2 
    CLS 
    97 
    LOCATE 2, 30: PRINT "LOGIN" 
    LOCATE 4, 10: INPUT "PLEASE ENTER CORRECT USERNAME OR PRESS B IF YOU WANT TO GO BACK"; USER$ 
    IF UCASE$(USER$) = "B" THEN 
     CLOSE #2 
     CALL menu 
    ELSEIF UCASE$(USER$) <> "B" THEN 
     WHILE NOT EOF(2) 
      INPUT #2, U$, p$ 
      IF U$ = USER$ THEN 
       TEMPUSER$ = U$ 
       PASSWORDS$ = p$ 
      END IF 
     WEND 
     IF USER$ = TEMPUSER$ THEN 
      98 
      PRINT PASSWORDS$ 
      LOCATE 5, 30: INPUT "ENTER PASSWORD OR PRESS B if you want to go back"; password$ 
      IF UCASE$(password$) = "B" THEN GOTO 97 
      ELSEIF UCASE$(password$) <> "B" THEN 
       IF password$ = PASSWORDS$ THEN 
        PRINT "HURRAY YOU LOGGED IN" 
       ELSE 
        GOTO 98 
       END IF 
      END IF 
     ELSE 
      GOTO 97 
     END IF 

     CLOSE #2 
END SUB 
+0

这么小的错误,我很沮丧。谢谢您的帮助! – uvrichest