 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
C64-Fan
Anmeldungsdatum: 26.10.2012 Beiträge: 79
|
Verfasst am: 18.06.2014, 11:58 Titel: Dim string und inkey. was mach ich falsch? |
|
|
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  |
|
Nach oben |
|
 |
St_W

Anmeldungsdatum: 22.07.2007 Beiträge: 956 Wohnort: Austria
|
Verfasst am: 18.06.2014, 12:26 Titel: |
|
|
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 |
|
 |
C64-Fan
Anmeldungsdatum: 26.10.2012 Beiträge: 79
|
Verfasst am: 18.06.2014, 12:57 Titel: |
|
|
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  _________________ Mitglied-Nr. 2000  |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4699 Wohnort: ~/
|
Verfasst am: 18.06.2014, 13:53 Titel: |
|
|
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.
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.
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 |
|
 |
St_W

Anmeldungsdatum: 22.07.2007 Beiträge: 956 Wohnort: Austria
|
Verfasst am: 18.06.2014, 14:20 Titel: |
|
|
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
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 |
|
 |
C64-Fan
Anmeldungsdatum: 26.10.2012 Beiträge: 79
|
Verfasst am: 18.06.2014, 14:44 Titel: |
|
|
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
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  _________________ Mitglied-Nr. 2000  |
|
Nach oben |
|
 |
|
|
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.
|
|