2016-12-25 99 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