2010-09-16 2 views
14

У меня есть заявление, если в QBASIC ... да ... QBASIC ...Вот старая школа IF заявление для вас, но есть проблема

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

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

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

+7

+1 Я люблю QBasic: D – halfdan

+2

Что такое неправильный вывод, который вы видите, когда вы вводите «сделать вам как сыр?» и он не говорит «Да, мне нравится сыр»? – Steven

+1

Что говорится, когда он не говорит «Да, я люблю сыр», как и ожидалось? Ничего, или ничего? – Meff

ответ

4

Ваш код при условии, кажется правильным ,

Выполните одно из следующих действий:

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

EDIT: Вы должны поставить goto start на любой результат сыра. В противном случае это будет код musicGenre.

+1

Эй, очень ура! $ выходы как «' вам нравится сыр »**, но **, он даже не выдает a $ после .. как ..вывод прав в первый раз, затем он пуст (включая вывод a $) второй раз, тогда он правильный третий. –

+1

, и я добавил остальную часть моего кода на вопрос –

+1

см. Мой ответ edit! – Steven

1
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 
+2

Код без объяснений не является приемлемым ответом здесь. Пожалуйста, отредактируйте, чтобы предоставить некоторую информацию о том, как ** ваш код решает проблему. Благодарю. –

0

Эта программа демонстрирует разбор входных данных и 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