1

我尝试使用 qbasic 制作一个简单的登录程序。我使用了 3 个子模块和 1 个主模块。这是代码:

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

一切都如我所愿,但在子模块登录中我猜是有问题的。即使我输入正确的密码和用户名,登录按摩也不会出现。但是如果我输入不存在的用户名,它会显示登录消息。请帮忙。提前致谢。

4

1 回答 1

3

您缺少END IF要匹配ELSEIF UCASE$(USER$) <> "B" THEN的内容(顺便说一句:如果UCASE$(USER$) = "B"为假,UCASE$(USER$) <> "B"则为真,因此您可以简单地说ELSE在那里)。

您可以尝试以更传统的方式缩进:

  • 每个IF, ELSEIF, ELSE, 和END IF匹配的都在同一列中,并且
  • 这些语句中的所有内容都缩进了几个空格。

相同的缩进规则可以应用于SELECT CASEWHILE-WENDDO-LOOPFOR-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
于 2016-12-25T15:55:58.737 回答