Wątek przeniesiony 2022-09-08 22:12 z C/C++ przez Riddle.

Program nie uruchamia się

0

Pojawia się komunikat "Expected: expression".

REM  Clock
SCREEN 7

CLS
start:
SCREEN 7
_FONT 16
LOCATE 1, 5
PRINT "CLOCK"
PRINT "________________________________________"

LINE (50, 50)-(100, 100), 1, BF
LOCATE 9, 5
PRINT "TIME"
LOCATE 10, 5
PRINT "CONTROL"
LINE (150, 50)-(200, 100), 2, BF
LOCATE 9, 18.5
PRINT "STOP WATCH"

DO

    exit$ = INKEY$
    IF exit$ = "e" OR exit$ = "E" THEN
        CLS
        SCREEN 7
        COLOR 2, 1
        LOCATE 5, 5
        PRINT "YOU HAVE ABORTED THE CLOCK"





        WHILE close_count <> 10
            close_count = close_count + 1
            LOCATE 7, 5
            PRINT "APPLICATION  ";
            IF close_count MOD 2 = 1 THEN
                PRINT "CLOSING >>>   "
            ELSE
                PRINT "CLOSING   >>> "
            END IF




            SLEEP 1
        WEND

        CLS
        SCREEN 7
        COLOR 10, 0
        END
    END IF


    Mouser mx, my, mb
    IF mb THEN
        IF mx >= 50 AND my >= 50 AND mx <= 100 AND my <= 100 THEN 'button down
            DO WHILE mb 'wait for button release
                Mouser mx, my, mb
            LOOP
            'verify mouse still in box area
            IF mx >= 50 AND my >= 50 AND mx <= 100 AND my <= 100 THEN
                GOTO proccess
            END IF
        END IF
    END IF



    Mouser mx, my, mb
    IF mb THEN
        IF mx >= 150 AND my >= 50 AND mx <= 200 AND my <= 100 THEN 'button down
            DO WHILE mb 'wait for button release
                Mouser mx, my, mb
            LOOP
            'verify mouse still in box area
            IF mx >= 150 AND my >= 50 AND mx <= 200 AND my <= 100 THEN
                time_control = 1
                GOTO proccess
            END IF
        END IF
    END IF
LOOP

proccess:

IF time_control = 0 THEN
    time_enter:
    LOCATE 12, 6
    INPUT "enter time"; t
    IF t > 1800 THEN
        mistake = mistake + 1
        IF mistake > 3 THEN
            PRINT "BLOCKED"
            END
        END IF

        GOTO time_enter
    END IF
END IF

Mouser mx, my, mb
IF mb THEN
    IF mx >= 150 AND my >= 50 AND mx <= 200 AND my <= 100 THEN 'button down
        DO WHILE mb 'wait for button release
            Mouser mx, my, mb
        LOOP
        'verify mouse still in box area
        IF mx >= 150 AND my >= 50 AND mx <= 200 AND my <= 100 THEN
            time_control = 1
            GOTO proccess
        END IF
    END IF
END IF



WHILE INKEY$ <> " "
    SLEEP 1
    count = count + 1
    tc = tc + 1
    BEEP
    CLS
    LOCATE 1, 5
    PRINT "CLOCK"
    PRINT "________________________________________"

    IF time_control = 1 THEN
        LINE (150, 50)-(200, 100), 2, BF
    END IF
    LOCATE 3, 5
    PRINT "CURRENT TIME:"; TIME$
    LOCATE 5, 5
    PRINT "MINUTES:"; minute
    LOCATE 6, 5
    PRINT "SECONDS:"; count
    IF count = 60 THEN
        count = 0
        minute = minute + 1
    END IF

    IF time_control = 0 THEN
        LOCATE 8, 5
        PRINT "TIME LEFT:"; (t - tc) \ 60; ":"; (t - tc) MOD 60
        IF tc = t THEN
            BEEP
            BEEP
            BEEP
            BEEP
            END
        END IF
    END IF
    IF time_control = 1 THEN
        Mouser mx, my, mb
        IF mb THEN
            IF mx >= 150 AND my >= 50 AND mx <= 200 AND my <= 100 THEN 'button down
                DO WHILE mb 'wait for button release
                    Mouser mx, my, mb
                LOOP
                'verify mouse still in box area
                IF mx >= 150 AND my >= 50 AND mx <= 200 AND my <= 100 THEN
                    END
                END IF
            END IF
        END IF
        LOCATE 10, 10
        PRINT "PRESS BUTTON TO END"
    END IF

WEND
GOTO start



SUB Mouser (x, y, b)
    mi = _MOUSEINPUT
    b = _MOUSEBUTTON(1)
    x = _MOUSEX
    y = _MOUSEY
END SUB
0
Szalony Programista2 napisał(a):

To wygląda na jakiś basic powinieneś to dać do innego działu i napisać co to za język i czym to uruchamiasz bo tego zreprodukować nie pójdzie.

to jest Q basic.

2

A nie pokazuje ci która linijka kodu ten błąd powoduje?

0

Tak pokazuje linijkę "WHILE close close LOCATE 7, 5"

1

Nie znam qbasic, ale to wygląda mi, że rysujesz jakieś gui i sprawdzasz czy się kliknęło w jakiś button, to twój kod? i drugie pytanie czemu qbasic i dos?
Może ktoś ci napisze jak to rozwiązać, ewentualnie może spróbuję to u siebie odpalić i najwyżej ci napiszę co pomogło.

0

ewentualnie może spróbuję to u siebie odpalić i najwyżej ci napiszę co pomogło

Chyba trzeba będzie tak zrobić.

czemu qbasic i dos?

Ten Q basic działa pod Windows.

screenshot-20220908224448.png

1

Ciekawe. Na obrazku jest inny kod niż ten, który został wklejony.
Tam gdzie wskazywany jest błąd ( na obrazku ) , oryginalnie wygląda tak:

  PRINT "YOU HAVE ABORTED THE CLOCK"

        WHILE close_count <> 10
            close_count = close_count + 1
            LOCATE 7, 5
            PRINT "APPLICATION  ";
            IF close_count MOD 2 = 1 THEN
                PRINT "CLOSING >>>   "
            ELSE
                PRINT "CLOSING   >>> "
            END IF

Zresztą widać że kod na obrazku jest po prostu popsuty.

0

Kod chyba psuje się podczas wczytywania do edytora QBASIC.

W edytorze EDIT i w Notatniku Windows jest OK.

1

Wszystko możliwe. Zatem trzeba poprawić "ręcznie" i sprawdzić czy wtedy działa.
Przed tym wszystkim może warto sprawdzić czy dobrze się kod zapisuje i potem odczytuje. Bo jak nie, to trochę nie ma to sensu.

0

W EDIT i w Notatniku kod jest OK.

Tylko jak to poprawnie przenieść do Q basica i uruchomić?

Zmieniłem plik na EXE i teraz jest nowy błąd:

screenshot-20220909003145.png

1

Musisz poeksperymentować.
Wg mnie wygląda na to, że problemem jest znak _
Wszystko za nim jest usuwane.
Usuń ten znak, zmień na inny - dowolna metoda i zobacz czy pomogło.

0

To są dwa różne światy i nie należy tego mieszać.

Może dlatego się nie chce uruchomić, bo jest w pliku BAS.
A jak zapisać ten kod w pliku EXE?

Programy są przecież w plikach EXE.

1

Niestety tak nie jest. Proponuję poczytać sobie o kompilatorach, interpreterach itp.
W skrócie: plik exe jest efektem działania kompilatora, który to "przetłumaczył" kod napisany np. w C, C++, Rust na kod zrozumiały dla procesora - czyli kod maszynowy.
Niestety nie wiem czy QBasic ma kompilator, czy też jest językiem interpretowanym.
Mam wrażenie, że zaczynasz swoją drogę do bycia super programistą, więc proponuję zastanowić się czy BASIC to dobry wybór.

Niemniej jak już zacząłeś to spróbuj jednak uruchomić ten kod - ale jednak w tym edytorze.

0
Robert Karpiński napisał(a):

Musisz poeksperymentować.
Wg mnie wygląda na to, że problemem jest znak _
Wszystko za nim jest usuwane.
Usuń ten znak, zmień na inny - dowolna metoda i zobacz czy pomogło.

Dobrze :)

To jest "line continuation" - scalanie wielu linii w jedną :)
A w stylu Microsoftu jest, że przy okazji część zawartości pliku jest ignorowana XD

1 użytkowników online, w tym zalogowanych: 0, gości: 1