Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Fehlermeldung

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
timS



Anmeldungsdatum: 15.05.2008
Beiträge: 7

BeitragVerfasst am: 15.05.2008, 01:15    Titel: Fehlermeldung Antworten mit Zitat

Hallo,
Ich musste mich für ein Schulprojekt die letzten Tage mit QuickBasic beschäftigen. Das Programm klappt und steuert das Auto über ein Relaisinterface wie es soll.
Nun möchte wollte ich eine .exe- Datei kompilieren, und da tritt mein Fehler auf:http://img88.imageshack.us/my.php?image=fehlerpe3.png
Der Code ist folgender:
Code:
CLS
start:
PRINT "--*Pfeiltasten benutzen*--"
PRINT "VORWŽRTS => HOCH"
PRINT "RšCKWŽRTS => RUNTER"
PRINT "BEENDEN => LEERTASTE"
VIEW PRINT 5 TO 25
COLOR 0, 7: CLS
SLEEP
druck% = INP(&H60)
SELECT CASE druck%
CASE 72
       DO
       a$ = INKEY$
       druck% = INP(&H60)
       IF druck% = 72 THEN
       OUT 888, 3
       ELSE
       OUT 888, 0
       GOTO start
       END IF
       LOOP UNTIL druck% <> 72
CASE 80
       DO
       a$ = INKEY$
       druck% = INP(&H60)
       IF druck% = 80 THEN
       OUT 888, 0
       ELSE
       OUT 888, 0
       GOTO start
       END IF
       LOOP UNTIL druck% <> 80
CASE 57
        COLOR 4, 14
        PRINT "PROGRAMM BEENDET"
        END
CASE ELSE
        PRINT "FALSCHE EINGABE"
        GOTO start
END SELECT


Ich hoffe ihr könnt mir schnellstmöglich helfen.

MfG timS
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 15.05.2008, 09:13    Titel: Antworten mit Zitat

Vermutlich liegt Deine Quellcode-Datei in einem anderen Pfad als der Compiler. Es gibt drei Möglichkeiten:
1) Du gibst beim Compilieren den vollen Pfad der Bas-Datei an oder verschiebst sie in den Ordner, wo der Compiler liegt.
2) Wenn Du mit QuickBasic arbeitest, hast Du den Editor dabei. Aus dem heraus kannst Du auch compilieren.
3) Wenn Du mit einem anderen Texteditor arbeitest, kannst Du in Windows oder der DOSshell die Quellcode-Datei mit der Maus direkt auf den Kommandozeilenkompiler ziehen. Der arbeitet dann von selbst weiter.
_________________
Und die Grundgebihr is aa scho drin- DOS is jo nett.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2511
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 15.05.2008, 09:14    Titel: Antworten mit Zitat

Ich würde als erstes einmal Umlaute in Dateinamen vermeiden. Benenn doch Dein Programm lieber als
Code:
FUEK.BAS


Ansonsten beinhaltet der Code wieder einmal einiges an Verbesserungsmöglichkeiten: GOTO sollte vermieden werden und kann in diesem Fall problemlos eliminiert werden: Wie wäre es mit einer grossen DO-LOOP-Schleife um das Ganze herum, die ein Leertastendruck als Abbruchbedingung besitzt? Siehe auch

http://www.dreael.ch/Deutsch/BASIC-Knowhow-Ecke/Anfaengerfehler.html

als Sammlung typischer derartiger Fehler. Ansonsten noch etwas Unlogisches gefunden:
timS hat Folgendes geschrieben:
Code:
       IF druck% = 80 THEN
       OUT 888, 0
       ELSE
       OUT 888, 0

d.h. macht wohl nicht sehr viel Sinn. Ich nehme an, das eine müsste ein von 0 abweichender OUT-Wert sein.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
timS



Anmeldungsdatum: 15.05.2008
Beiträge: 7

BeitragVerfasst am: 15.05.2008, 11:24    Titel: Antworten mit Zitat

Danke ihr beiden, es hat einfach am Dateinamen gelegen. Darauf wäre ich nie gekommen^^.
@dreael
Code:
IF druck% = 80 THEN
       OUT 888, 12
       ELSE
       OUT 888, 0

Hatte mich da einfach verschrieben. Das mit der Schleife werde ich auch befolgen.


Zuletzt bearbeitet von timS am 15.05.2008, 21:49, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2511
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 15.05.2008, 20:24    Titel: Antworten mit Zitat

Habe inzwischen eine stark verbesserte Version zusammengestellt:

http://beilagen.dreael.ch/QB/FUEK_2.BAS

Kommt ohne GOTO aus und zeigt Dir ausserdem noch auf, wie die Sache mit dem Drücken und Loslassen bei INP(&H60) korrekt funktioniert.

Mein Beispiel liesse sich übrigens noch soweit ausbauen, dass man 8 Tasten (Scancode) gleichzeitig auswerten könnte und hierbei jeder Taste ein korrespondierendes Bit (Pin) am Parallelport zuweist, um Muster generieren zu können.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
timS



Anmeldungsdatum: 15.05.2008
Beiträge: 7

BeitragVerfasst am: 15.05.2008, 21:48    Titel: Antworten mit Zitat

Vielen Dank für die Mühe. Ich werde das Programm morgen mal mit dem Auto ausprobieren und dann hier posten wies geklappt hat und was ich vllt nicht so ganz verstehe.

MfG timS
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
timS



Anmeldungsdatum: 15.05.2008
Beiträge: 7

BeitragVerfasst am: 16.05.2008, 22:49    Titel: Antworten mit Zitat

Das Programm Funktioniert super, es gefällt mir besser als meins lächeln Nun fehlt mir aber leider etwas das verständnis. Ich zitiere mal die Stellen, die ich nicht ganz verstehe:

' Bit 7 ist immer, ob heruntergedrckt oder losgelassen
' Bits 6-0 sind Scancode der jeweiligen Taste


WHILE drin%...WEND
1. Ich verstehe die Bedingung nicht.
2. Warum keine DO...LOOP- Schleife?

(Bin übrigens von Samstag bis Samstag im Urlaub.)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4615
Wohnort: ~/

BeitragVerfasst am: 16.05.2008, 22:55    Titel: Antworten mit Zitat

Mit WHILE...WEND wird vor dem ersten Durchlauf getestet, ob die Bedingung erfüllt ist - evtl. wird die Schleife gar nicht durchlaufen. Mit DO...LOOP UNTIL wird erst nach dem ersten Durchlauf überprüft, d. h. es findet auf jeden Fall mindestens ein Durchlauf statt.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2511
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 17.05.2008, 16:29    Titel: Antworten mit Zitat

timS hat Folgendes geschrieben:
WHILE drin%...WEND
1. Ich verstehe die Bedingung nicht.

In Pascal und Modula-2 wäre drin% vom Typ BOOLEAN. Leider bietet QB diesen Datentyp nicht an (VBScript dagegen hat ihn, FreeBasic fehlt dieser Datentyp auch immer noch). QB (und auch FreeBasic) aber stellen Boolsche Werte durch eine (Integer-)Zahl dar mit Wert <> 0, bevorzugt -1 = TRUE, 0 = FALSE.

Von daher kommt es, dass in vielen Codes ein Ausdruck
Code:
IF Ausdruck <> 0 THEN

zu
Code:
IF Ausdruck THEN

verkürzt wird. In C/C++ übrigens analog. Für Dich zum Testen: Probiere einmal
Code:
PRINT 6 > 4
PRINT 3 <> 3

im Direktmodus aus.

timS hat Folgendes geschrieben:
2. Warum keine DO...LOOP- Schleife?

WHILE/WEND ist übrigens 100% gleichwertig zu DO WHILE/LOOP, nur andere Syntax (gab es bereits in GW-BASIC).

/edit: Inzwischen auch mein Beispiel ausgebaut:

http://beilagen.dreael.ch/QB/FUEK_3.BAS

Zum einen Beendung mit <Esc> anstelle von Leertaste, zum anderen 8 Tasten ausgesucht, bei welcher jede einem Datenpin vom Parallelport entspricht, womit Du bis zu 8 verschiedene Relais oder weiss ich was ansteuern kannst.

Wichtig: Mehrere Tasten können auch gleichzeitig gedrückt werden, dementsprechend bekommen auch mehrere Pins am Parallelport die berühmten +5 Volt anliegend. Dieses Verhalten besitzt übrigens bereits FUEK_2.BAS.

Für andere Tasten einfach die beiden DATA-Zeilen entsprechend anpassen (Scancode und Textsymbol). z.B. Dein Auto könntest Du auf D0 das Vorwärts nehmen und auf D1 das Rückwärts bei Deiner Hardware nehmen.

@alle übrigen: Damit steht Euch ein ganz einfacher Tastatur-Bitmustergenerator für das Testen von Parallelportschaltungen zur Verfügung.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
timS



Anmeldungsdatum: 15.05.2008
Beiträge: 7

BeitragVerfasst am: 26.05.2008, 18:32    Titel: Antworten mit Zitat

Danke für die Erklärungen und das neue Programm, ich werde mich mal in http://beilagen.dreael.ch/QB/FUEK_3.BAS einarbeiten ;>

MfG timS
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
timS



Anmeldungsdatum: 15.05.2008
Beiträge: 7

BeitragVerfasst am: 09.06.2008, 00:14    Titel: Antworten mit Zitat

Wo ist denn der sinn in dieser Zeile?
Code:
dummy$ = INKEY$


MfG
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4615
Wohnort: ~/

BeitragVerfasst am: 09.06.2008, 06:59    Titel: Antworten mit Zitat

Die Zeile liest ein Zeichen von der Tastatur aus, vermutlich, um den Tastaturbuffer zu leeren.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2511
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 09.06.2008, 09:12    Titel: Antworten mit Zitat

timS hat Folgendes geschrieben:
Wo ist denn der sinn in dieser Zeile?
Code:
dummy$ = INKEY$


MfG

Ist eigentlich von Dir selber etwas! Zitat:
timS hat Folgendes geschrieben:
Code:

       a$ = INKEY$
       druck% = INP(&H60)

d.h. Du gebrauchst hier a$ ebenfalls als Dummy-Variable, weil Du ja mit a$ nirgends mehr etwas machst.

Allerdings konnte ich tatsächlich einen sinnvollen Grund fürs Puffer leeren entdecken: INP(&H60)-basierte Tastaturabfragen laufen gerne manchmal etwas hakelig, wenn man das BIOS und DOS nicht mit solchen INKEY$-Abfragen "entlastet" (stellte ich seinerzeit beim JUMPGAME-Beispiel fest). => Von daher hast Du mir sogar unbemerkt einen kleinen Verbesserungsvorschlag mit Deinem ursprünglichen Beispiel geliert. Ich habe dann lediglich den Namen dummy$ statt a$ genommen, damit die Eigenschaft, dass nichts mehr mit dieser Variable weiterverarbeitet wird, besser zur Geltung kommt.

Und damit will ich auch eine Antwort zu diesem Thread geben, weil es thematisch wieder einmal eng zusammenhängt: Bei vielen anderen Programmiersprachen sind derartige Dummy-Variablen gar nicht nötig, da eine Funktion wie eine Anweisung aufgerufen werden kann!
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
timS



Anmeldungsdatum: 15.05.2008
Beiträge: 7

BeitragVerfasst am: 09.06.2008, 15:45    Titel: Antworten mit Zitat

Ah, genau ;D
Das war zum leeren des Tastenpuffers, damit der PC nicht anfängt zu piepen
(Was bei Pfeiltasten ja nicht der Fall ist). Danke

MfG
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz