2016-12-25 4 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 там).

Вы можете попробовать отступов в немного более традиционным способом:

  • каждый 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 
+0

так небольшая ошибка, и я был расстроен. Спасибо за помощь! – uvrichest

 Смежные вопросы

  • Нет связанных вопросов^_^