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:

eingabe = INPUT(1)

 
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
hello



Anmeldungsdatum: 15.04.2010
Beiträge: 34

BeitragVerfasst am: 02.05.2010, 18:49    Titel: eingabe = INPUT(1) Antworten mit Zitat

Hallo,

Ich habe dieses Programm (Auszug) geschrieben:



DIM eingabe AS INTEGER
eingabe = INPUT(1)
PRINT " Du hast " & eingabe & " gedrückt "
SLEEP




Nicht sehr späktakulär, ist aber die Grundlage für mein nächstes Programm.



Der gibt mir aber error aus:

    error 159: Invalid assignment/conversion in 'eingabe = INPUT(1)'





Was hab' Ich falsch gemacht?
_________________
Regards lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 02.05.2010, 18:51    Titel: Antworten mit Zitat

Input gibt immer einen String zurück, also musst du "eingabe" als String deklarieren.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 02.05.2010, 18:54    Titel: Antworten mit Zitat

Hallo,

erst schickst du mir die Frage per PN und kaum hab ich die PN beantwortet, fragst du noch mal das gleiche im Forum... durchgeknallt

Also hier die Antwort noch mal. zwinkern

Die INPUT-Funktion liefert immer einen STRING zurück. Diesen kannst du mit der VAL-Funktion (siehe Eintrag zu VAL in der Befehlsreferenz) in einen numerischen Datentyp umwandeln:
Code:
DIM eingabe AS INTEGER
eingabe = VAL(INPUT(1))
PRINT "Du hast " & eingabe & " gedrueckt. "
SLEEP
END

Hinweis: Wenn du z. B. einen Buchstaben, Leerzeichen oder sowas statt einer Zahl eingibst (z.B. "a"), liefert VAL(...) 0 zurück, ansonsten die eingegebene Zahl.

Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
hello



Anmeldungsdatum: 15.04.2010
Beiträge: 34

BeitragVerfasst am: 02.05.2010, 19:33    Titel: Antworten mit Zitat

Sebastian hat Folgendes geschrieben:
Hallo,

erst schickst du mir die Frage per PN und kaum hab ich die PN beantwortet, fragst du noch mal das gleiche im Forum... durchgeknallt

Also hier die Antwort noch mal. zwinkern

Die INPUT-Funktion liefert immer einen STRING zurück. Diesen kannst du mit der VAL-Funktion (siehe Eintrag zu VAL in der Befehlsreferenz) in einen numerischen Datentyp umwandeln:
Code:
DIM eingabe AS INTEGER
eingabe = VAL(INPUT(1))
PRINT "Du hast " & eingabe & " gedrueckt. "
SLEEP
END

Hinweis: Wenn du z. B. einen Buchstaben, Leerzeichen oder sowas statt einer Zahl eingibst (z.B. "a"), liefert VAL(...) 0 zurück, ansonsten die eingegebene Zahl.

Viele Grüße!
Sebastian


Ich hab' die Frage direkt danach ans Forum gestellt, sry :-$ Aber danke lächeln
_________________
Regards lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 15.05.2010, 12:56    Titel: Antworten mit Zitat

hello - Neue Nachricht hat Folgendes geschrieben:
Ich hab' nochmal was mit INPUT(1) gemacht und frage mich was daran falsch ist:
Code:
DO
anfang = INPUT(1)
LOOP UNTIL (anfang = 1) OR (anfang = 2)


Der gibt mir aus:
Code:
error 159: Invalid assignment/conversion in 'anfang = INPUT(1)'

Das Problem dürfte wieder das gleiche sein wie bei deiner ursprünglichen Frage.

INPUT(...) gibt dir immer einen STRING zurück (siehe dazu: Erklärung, was das ist und wie man damit umgeht). anfang scheint in deinem Quelltext eine Variable numerischen Datentyps zu sein, also z.B. ein Integer. INPUT(...) gibt aber einfach Zeichen ("p", "#", "3", "@", ....) zurück und die kann man nicht direkt einer Zahlvariablen zuweisen, weshalb der Compiler meldet: "Invalid assignment" (zu deutsch: "ungültige Zuweisung")
Das eingegebene Zeichen von INPUT musst du zuerst mit VAL oder VALINT in eine Zahl umwandeln. Diese beiden Funktionen werden mit einem STRING "befüllt" und geben eine Zahl zurück. Wenn z.B. ein "h" eingetippt wird statt einer Zahl, geben VAL oder VALINT als Zahlwert 0 zurück. Schau dir dazu am besten folgenden Eintrag zu VALINT in der Befehlsreferenz an.

Als Lösung ergibt sich daraus:
Code:
DIM AS INTEGER anfang
DO
  anfang = VALINT(INPUT(1))
  PRINT anfang
LOOP UNTIL (anfang = 1) OR (anfang = 2)
PRINT "Fertig."
SLEEP


Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
dreael
Administrator


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

BeitragVerfasst am: 15.05.2010, 20:38    Titel: Antworten mit Zitat

Evtl. sollte anstelle von VAL() besser ASC() verwendet werden, welches jedes Zeichen (Taste) als eindeutiger Wert umwandelt. Die Zahlen sind dann einfach 48-57 (ASC(x$)-48 entspricht dem VAL()-Wert), Buchstaben z.B. 97-122, 27=<Esc>-Taste usw.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
hello



Anmeldungsdatum: 15.04.2010
Beiträge: 34

BeitragVerfasst am: 15.05.2010, 20:40    Titel: Antworten mit Zitat

Sebastian hat Folgendes geschrieben:
hello - Neue Nachricht hat Folgendes geschrieben:
Ich hab' nochmal was mit INPUT(1) gemacht und frage mich was daran falsch ist:
Code:
DO
anfang = INPUT(1)
LOOP UNTIL (anfang = 1) OR (anfang = 2)


Der gibt mir aus:
Code:
error 159: Invalid assignment/conversion in 'anfang = INPUT(1)'

Das Problem dürfte wieder das gleiche sein wie bei deiner ursprünglichen Frage.

INPUT(...) gibt dir immer einen STRING zurück (siehe dazu: Erklärung, was das ist und wie man damit umgeht). anfang scheint in deinem Quelltext eine Variable numerischen Datentyps zu sein, also z.B. ein Integer. INPUT(...) gibt aber einfach Zeichen ("p", "#", "3", "@", ....) zurück und die kann man nicht direkt einer Zahlvariablen zuweisen, weshalb der Compiler meldet: "Invalid assignment" (zu deutsch: "ungültige Zuweisung")
Das eingegebene Zeichen von INPUT musst du zuerst mit VAL oder VALINT in eine Zahl umwandeln. Diese beiden Funktionen werden mit einem STRING "befüllt" und geben eine Zahl zurück. Wenn z.B. ein "h" eingetippt wird statt einer Zahl, geben VAL oder VALINT als Zahlwert 0 zurück. Schau dir dazu am besten folgenden Eintrag zu VALINT in der Befehlsreferenz an.

Als Lösung ergibt sich daraus:
Code:
DIM AS INTEGER anfang
DO
  anfang = VALINT(INPUT(1))
  PRINT anfang
LOOP UNTIL (anfang = 1) OR (anfang = 2)
PRINT "Fertig."
SLEEP


Viele Grüße!
Sebastian



Maaaaaaaaaaaaann, schon wieder vergessen, danke sehr lächeln
_________________
Regards lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 15.05.2010, 21:16    Titel: Antworten mit Zitat

dreael hat Folgendes geschrieben:
Evtl. sollte anstelle von VAL() besser ASC() verwendet werden, welches jedes Zeichen (Taste) als eindeutiger Wert umwandelt. Die Zahlen sind dann einfach 48-57 (ASC(x$)-48 entspricht dem VAL()-Wert), Buchstaben z.B. 97-122, 27=<Esc>-Taste usw.

Ich finde eigentlich, dass ASC in dem Zusammenhang nicht vorteilhaft wäre. Zum einen ist die Subtraktion nach dem Funktionsaufruf nötig, wobei vermutlich nur wenige die ASCII-Tabelle hinreichend im Kopf haben. Zum anderen schlägt die ASC-Methode bei Eingabepuffern von 2 oder mehr Zeichen fehl, während auch dies mit VAL bzw. VALINT (für Ganzzahlen) problemlos funktioniert:
Code:
Dim Eingabe As String
Print "Bitte gib eine zweistellige Zahl ein (ggf. mit fuehrender Null): ";
Eingabe = INPUT(2)
Print chr(34) & Eingabe & chr(34)
Print
Print "    ASC(Eingabe)      = " & ASC(Eingabe)
Print "    ASC(Eingabe) - 48 = " & ASC(Eingabe)-48
Print " VALINT(Eingabe)      = " & VALINT(Eingabe)
Sleep

_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
nemored



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

BeitragVerfasst am: 15.05.2010, 21:22    Titel: Antworten mit Zitat

Ich habe in diesem Zusammenhang früher immer überprüft, ob
Code:
VAL(eingabe) > 0 OR eingabe = "0"

ist. Bei zweiziffriger Eingabe wäre das dann natürlich entsprechend "00".
_________________
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
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