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:

Dim string und inkey. was mach ich falsch?

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



Anmeldungsdatum: 26.10.2012
Beiträge: 79

BeitragVerfasst am: 18.06.2014, 11:58    Titel: Dim string und inkey. was mach ich falsch? Antworten mit Zitat

die IDEdit nimmt das nicht an, warum?

Code:
Dim as string anrede(1to4)={"Herr","Frau","Graf",Gräfin"}


habs dann so gemacht, dann gings:

Code:
Dim as string anrede(1to4)
anrede(1)="Herr":anrede(2)="Frau",etc...


aber wieso gehts nicht wie oben, kann doch laut Hilfe direkt reinschreiben?

--------------------

auch hier war mein Problem:

Code:
DO : LOOP WHILE LEN(INKEY)    'Tastaturpuffer leeren
Do
If InKey = "w" Or InKey = "W" Then geschlecht = 1 : Exit
If InKey = "m" Or InKey = "M" Then geschlecht = 2 : Exit
Loop
' endlosschleife mit ausgang bei w/m-eingabe



habs dann so gelöst:
Code:
DO : LOOP WHILE LEN(INKEY)    'Tastaturpuffer leeren
Sleep
If InKey = "w" Or InKey = "W" Then geschlecht = 1
If InKey = "m" Or InKey = "M" Then geschlecht = 2


auch hier meine frage, wieso geht das erste beispiel nicht?
_________________
Mitglied-Nr. 2000 lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 956
Wohnort: Austria

BeitragVerfasst am: 18.06.2014, 12:26    Titel: Antworten mit Zitat

zu 1:
Bei mir funktioniert das ohne Probleme mit FBC 0.90.1. Vielleicht hast du eine alte Compilerversion? Im obigen code fehlen dir außerdem ein Anführungszeichen und Leerzeichen in "1to4", aber ich nehme an, dass du diese Fehler im eigentlichen Code nicht gemacht hast.
Dim as String anrede(1 To 4) = {"Frau", "Herr", "Madame", "Monsieur"}


zu 2:
Jedes Mal wenn du inkey aufrufst wird ein Zeichen aus dem Tastaturpuffer zurückgegeben und gleichzeitig auch daraus entfernt. Die Zeichen gehen also verloren in deiner Variante. Dass die zweite deiner Ansicht nach funktioniert ist wohl eher ein Glücksfall. Im Allgemeinen funktioniert auch deine angebliche Lösung nicht. Richtigerweise würde man inkey nur einmal (pro Schleifendurchlauf) abfragen und das Ergebnis zwischenspeichern.
_________________
Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
C64-Fan



Anmeldungsdatum: 26.10.2012
Beiträge: 79

BeitragVerfasst am: 18.06.2014, 12:57    Titel: Antworten mit Zitat

ja danke ein " hat ich vergessen abzuschreiben bei Dim,

Dim Shared As String anrede(1 To 4)={"Herr","Frau","Graf","Gräfin"}

- die Fehlermeldung kommt:
FbTemp.bas(18 ) error 74: Var-len strings cannot be initialized in 'Dim Shared As String anrede(1 To 4)={"Herr","Frau","Graf","Gräfin"}'

hab Idedit 1.0.7.6c
--
Nebenfrage: wozu braucht man eigentlich die suffixe ll,$,etc wenn man doch eh alle Variablen dimensioniert? wann setzt man sie ein?
und wieso haben mache Var-typen keine suffixe, wie zb Byte,UByte,UShort und UInteger ?

------------

ja jetzt merk ichs inkey schaut nur ob "w" da ist da löscht es den Puffer. müsste aber so gehn, wenn ich inkey an a übergebe?

Dim a as string

DO : LOOP WHILE LEN(INKEY) 'Tastaturpuffer leeren
Do
a=inkey
If a = "w" Or a = "W" Then geschlecht = 1 : Exit
If a = "m" Or a = "M" Then geschlecht = 2 : Exit
Loop
' endlosschleife mit ausgang bei w/m-eingabe

trotzdem:
FbTemp.bas(6) error 214: Expected 'CONSTRUCTOR', 'DESTRUCTOR', 'DO', 'FOR', 'FUNCTION', 'OPERATOR', 'PROPERTY', 'SELECT', 'SUB' or 'WHILE' in 'If a = "w" Or a = "W" Then geschlecht = 1 : Exit'

bei:
DO : LOOP WHILE LEN(INKEY) 'Tastaturpuffer leeren
Sleep
a=InKey
If a = "w" Or a = "W" Then geschlecht = 1
If a = "m" Or a = "M" Then geschlecht = 2
gehts aber er akzeptiert jeden x-beliebigen buchstaben traurig
_________________
Mitglied-Nr. 2000 lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



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

BeitragVerfasst am: 18.06.2014, 13:53    Titel: Antworten mit Zitat

Bei SHARED kannst du keine Strings variabler Länge gleich mit initialisieren. Wenn dir das wichtig wäre, müsstest du DIM SHARED AS STRING*7 nehmen (z. B.), mit möglichen anderen Problemen, die vielleicht mit Strings fester Länge auftreten. grinsen

Zitat:
wozu braucht man eigentlich die suffixe ll,$,etc wenn man doch eh alle Variablen dimensioniert? wann setzt man sie ein?

Die Suffixe werden nicht für die Variablennamen gebraucht und funktionieren da auch nicht; du kannst sie aber hinter den Variablenwert setzen, um deutlich zu machen, dass es sich um diesen Typen handelt.
Code:
print &hFFFFFFFFll

würde das ll am Ende fehlen, würde der Compiler eine Integer-Variable nehmen; da ich mit 32bit compiliere, interpretiert er als -1. Das spielt auch eine Rolle wenn jemand VAR oder CONST verwenden will. In diesem Fall halte ich die Suffixe allerdings für erschwerend.

Was es genau mit $ auf sich hat, kann ich nicht sagen - ich vermute, das bezieht sich nur noch auf die Möglichkeit, bei einigen eingebauten Funktionen das $ anzuhängen: LEFT$, STR$ usw.

Zu INKEY: EXIT DO müsste es heißen.
Code:
Do
  a=inkey
  If a = "w" Or a = "W" Then geschlecht = 1 : Exit Do
  If a = "m" Or a = "M" Then geschlecht = 2 : Exit Do
Loop

_________________
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
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 956
Wohnort: Austria

BeitragVerfasst am: 18.06.2014, 14:20    Titel: Antworten mit Zitat

C64-Fan hat Folgendes geschrieben:
ja danke ein " hat ich vergessen abzuschreiben

Es wäre einfacher und besser, wenn du kurze Codeausschnitte direkt hereinkopierst, anstatt sie abzuschreiben UND in einen Code Abschnitt gibst: [ code] [ /code] (ohne Leerzeichen), dafür wäre der Knopf beim schreiben des Beitrags da zwinkern

C64-Fan hat Folgendes geschrieben:
wozu braucht man eigentlich die suffixe ll,$,etc wenn man doch eh alle Variablen dimensioniert? wann setzt man sie ein?

nemored erklärte bereits Suffixe für Werte. Insbesondere weil du auch "$" als Suffix anführst, will ich jedoch hinzufügen dass es auch für Variablennamen und Funktionen Suffixe gab, um deren Datentypen anzugeben. Dies ist jedoch heutzutage überflüssig und soll/kann nicht mehr verwendet werden.
_________________
Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
C64-Fan



Anmeldungsdatum: 26.10.2012
Beiträge: 79

BeitragVerfasst am: 18.06.2014, 14:44    Titel: Antworten mit Zitat

ok danke , werd eure tips beherzigen.

danke nemored, das mit dem 'exit do' hat geklappt

und shared Strings muss ich halt einzeln zuordnen, geht scho lächeln
das mit String*7 muss ich mal nachschaun.

mit dem suffixe weiss ich jetzt auch bescheid


Danke euch beiden, es läuft.
werd bestimmt bald wieder andere Probs haben zwinkern
_________________
Mitglied-Nr. 2000 lächeln
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 FreeBASIC. 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