qbasic-我的代码有什么问题?我没有得到我想要的
qbasic-What is wrong with my code?I'm not getting what i want
我尝试使用 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
一切都如我所愿,但我猜在子模块登录中出了点问题。即使我输入正确的密码和用户名,也不会出现登录信息。但是如果我输入不存在的用户名,它会显示登录消息。请帮忙。提前致谢。
您缺少匹配 ELSEIF UCASE$(USER$) <> "B" THEN
的 END IF
(顺便说一下:如果 UCASE$(USER$) = "B"
为假,则 UCASE$(USER$) <> "B"
为真,因此您可以简单地说ELSE
那里)。
您可以尝试以更传统的方式缩进:
- 匹配的每个
IF
、ELSEIF
、ELSE
和 END IF
都在同一列中,并且
- 这些语句中的所有内容都缩进了几个空格。
相同的缩进规则可以应用于 SELECT CASE
、WHILE-WEND
、DO-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
我尝试使用 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
一切都如我所愿,但我猜在子模块登录中出了点问题。即使我输入正确的密码和用户名,也不会出现登录信息。但是如果我输入不存在的用户名,它会显示登录消息。请帮忙。提前致谢。
您缺少匹配 ELSEIF UCASE$(USER$) <> "B" THEN
的 END IF
(顺便说一下:如果 UCASE$(USER$) = "B"
为假,则 UCASE$(USER$) <> "B"
为真,因此您可以简单地说ELSE
那里)。
您可以尝试以更传统的方式缩进:
- 匹配的每个
IF
、ELSEIF
、ELSE
和END IF
都在同一列中,并且 - 这些语句中的所有内容都缩进了几个空格。
相同的缩进规则可以应用于 SELECT CASE
、WHILE-WEND
、DO-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