2016-12-25 13 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"がfalseの場合は、単にそこにELSEを言うことができるので、その後UCASE$(USER$) <> "B"は、真である)と一致します。

あなたは少しにより従来の方法をインデントしてみてください:

  • 一致するすべてのIFELSEIFELSE、およびEND IFは同じ列にあり、そしてそれらのステートメントの内側
  • すべてがいくつかのインデントされより多くのスペース。

同じインデントルールがSELECT CASEWHILE-WENDDO-LOOP、及びFOR-NEXTに適用することができます。

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

ので、小さなミスと私はイライラだった:あなたがいることをしなかった場合

とにかく、あなたが不足しているEND IFが表示されることがあります。助けてくれてありがとう! – uvrichest

関連する問題