Вот заявление старой школы IF для вас, но есть проблема - PullRequest
14 голосов
/ 16 сентября 2010

У меня есть оператор IF в QBASIC ... да ... QBASIC ...

Я учил кого-то программировать (я решил, что это было бы хорошо и легко увидеть как работает синтаксис).

... В любом случае, у меня есть этот код:

CLS

start:
INPUT ">>", a$

PRINT a$
IF (INSTR(a$, "do you")) THEN
    IF (INSTR(a$, "like")) THEN
        IF (INSTR(a$, "cheese")) THEN PRINT "Yep, I like cheese":
        IF (INSTR(a$, "music")) THEN PRINT "Depends, which genre?": GOTO musicGenre
    ELSE IF (INSTR(a$, "hate")) THEN
            IF (INSTR(a$, "cheese")) THEN PRINT "No, I like cheese"
        END IF
    END IF
END IF


musicGenre:
INPUT ">>", m$
SELECT CASE (m$)
    CASE "pop"
        PRINT "..pop! lol, baa baa"
    CASE "rock"
        PRINT "Rock is ok"
END SELECT
GOTO start

Но когда я набираю "do you like cheese?", кажется, что я отвечаю только "Yep, I like cheese" через раз ...

Может ли кто-нибудь пролить свет на это?

примечание:
"do you like music?" работает каждый раз ...

примечание 2:
Снимок экрана:
alt text

Ответы [ 3 ]

4 голосов
/ 16 сентября 2010

Ваш код указан правильно.

Попробуйте выполнить одно из следующих действий:

  • Если возможно, пришлите нам пример кода большего размера.Я предполагаю, что ошибка находится за пределами предоставленного вами кода.
  • Выведите ввод (a$) перед первым IF, чтобы подтвердить, что ваш код будет работать с ожидаемым вводом.* В большинстве языков FALSE - это ноль, а истина - это все остальное.Тем не менее, вы можете быть более точным со следующими IF (INSTR(a$) > 0).

РЕДАКТИРОВАТЬ: Вы должны поставить goto start на любой результат сырВ противном случае это будет код musicGenre.

1 голос
/ 07 июля 2013
CLS

start:
    INPUT ">>", a$

    IF (INSTR(1, a$, "do you")) THEN
        IF (INSTR(1, a$, "like")) THEN
            IF (INSTR(1, a$, "cheese")) THEN PRINT "Yep, I like cheese"
            IF (INSTR(1, a$, "music")) THEN PRINT "Depends, which genre?": GOSUB musicGenre
        END IF
    IF (INSTR(1, a$, "hate")) THEN
        IF (INSTR(1, a$, "cheese")) THEN PRINT "No, I like cheese"
    END IF
END IF

GOTO start
musicGenre:
    INPUT ">>", m$
    SELECT CASE (m$)
        CASE "pop"
            PRINT "..pop! lol, baa baa"
        CASE "rock"
            PRINT "Rock is ok"
    END SELECT
RETURN
0 голосов
/ 27 августа 2016

Эта программа демонстрирует синтаксический анализ ввода и gosubs в Basic.

REM Cheese progran source:
CLS
DO
    INPUT ">>", a$
    a$ = LCASE$(a$)
    PRINT a$
    IF INSTR(a$, "do you") THEN
        IF INSTR(a$, "like") THEN
            IF INSTR(a$, "cheese") THEN
                PRINT "Yep, I like cheese":
            END IF
            IF INSTR(a$, "music") THEN
                PRINT "Depends, which genre?"
                GOSUB MusicGenre
            END IF
        ELSE
            IF INSTR(a$, "hate") THEN
                IF INSTR(a$, "cheese") THEN
                    PRINT "No, I like cheese"
                END IF
            END IF
        END IF
    END IF
LOOP
END
MusicGenre:
INPUT ">>>", m$
a$ = LCASE$(a$)
SELECT CASE (m$)
    CASE "pop"
        PRINT "..pop! lol, baa baa"
    CASE "rock"
        PRINT "Rock is ok"
END SELECT
RETURN
...