Aus Das deutschsprachige Scratch-Wiki

Viele Programme fragen Benutzereingaben ab. In Scratch gibt es dafür den Block:

frage [] und warte

Fehler können schnell entstehen, wenn die Eingaben in einem anderen Format kommen, als es im Programm vorgesehen ist. Beispiele sind Zahlen mit unterschiedlich verwendeten Trennzeichen für Nachkomma- oder Tausenderstellen, unterschiedliche Datumsformate oder uneinheitliche Verwendung von Groß- und Kleinbuchstaben bei Texteingaben.

Scratch ist bei der Entgegennahme von Benutzereingaben sehr gutmütig und wandelt Datentypen, soweit es geht, nach Bedarf um (Typumwandlung). Wenn man wirklich sichergehen will, dass keine Fehler durch Benutzereingaben entstehen, muss man bestimmte Fälle beachten und abfangen.

Zahleneingaben

Im Scratch werden Nachkommastellen mit einem Punkt abgetrennt. Wenn man bei der Eingabe wie üblich mit einem Komma trennt, erkennt Scratch die Eingabe als Zeichenkette und setzt sie für Rechenoperationen automatisch in den Wert Null um. Das kann unbemerkt zu völlig falschen Ergebnissen führen. Deshalb sollte man es unbedingt abfangen.

Eingabewert prüfen

Ein Abfragelogik, die eine solche Fehleingabe findet, kann so aussehen:

<<nicht <(Antwort)=(0)>> und <((Antwort) + (1))=(1)>

Erläuterung:

Bedingung 1:

<(Antwort)=(0)>
gibt nur WAHR zurück bei einer echten Null, eine Zeichenkette würde hier als etwas anderes als Null erkannt.
<nicht<(Antwort)=(0)>>

Kehrt das Vorhergehende um, so dass die Zeichenkette WAHR ergibt und die echte Null FALSCH.

Bedingung 2:

<((Antwort) + (1))=(1)>

gibt WAHR zurück sowohl bei einer echten Null als auch bei einer Zeichenkette, die mit Null evaluiert wurde, aber nicht bei einer Zahl ungleich Null. Bei richtig formatierten Zahlen wird also immer genau eine der beiden Bedingungen erfüllt. Eine falsch formatierte Zahl erfüllt immer beide.

Um das Ganze abzurunden, wiederholt man die Abfrage solange, bis man eine korrekt formatierte Zahl erhält.

frage [Bitte Zahl eingeben:] und warte
Wiederhole bis <nicht<<nicht <(Antwort)=(0)>> und <((Antwort) + (1))=(1)>>>
frage [Falsches Format: Bitte nochmal eingeben:] und warte

Tastatur vorgeben

Ein anderer Weg besteht darin, keine freie Eingabe zuzulassen, sondern eine Tastatur zu programmieren und damit sicherzustellen, dass nichts anderes als korrekt formatierte Zahlen eingegeben werden können. Das kann so aussehen:




Schau' dir dieses Projekt auf der Scratch-Webseite an...


Die Zifferntasten werden bei Aufruf der Tastatur eingeblendet und sind so programmiert wie hier im Beispiel die Ziffer 1:

Wenn ich angeklickt werde
setze [InputString v] auf (verbinde (InputString)(1))
setze [LetzteTasteZahl v] auf [WAHR]

In der Variablen InputString werden die Werte der geklickten Tasten gesammelt. Mit dem Schalter LetzteTasteZahl stellt man sicher, dass die Eingabe mit einer Zahl endet und nicht z. B. mit einem Trennzeichen.

Die Taste mit dem trennenden Komma bzw. Punkt programmiert man so, dass sie nur einmal aufgerufen werden kann.

Wenn ich angeklickt werde
falls <(PunktGesetzt)=[FALSCH] >
setze [InputString v] auf (verbinde (InputString)(.))
setze [PunktGesetzt v] auf [WAHR]

Dann braucht man noch eine Umschalttaste für das Vorzeichen

Wenn ich angeklickt werde
setze [InputString v] auf ((InputString)* [-1])

und eine Löschtaste.

Wenn ich angeklickt werde
setze [InputString v] auf []

Die angeklickten Ziffern werden jeweils hinten an eine Zeichenkette angehängt.

Zeichenketten

Scratch unterscheidet beim Vergleich von Zeichenketten nicht zwischen Groß- und Kleinschreibung. 'ABC' ist für Scratch das Gleiche wie 'abc'. Damit werden bereits viele mögliche Eingabeprobleme abgefangen.

Etwas anderes ist es, wenn man genau diese Unterscheidung zwischen Groß- und Kleinbuchstaben in seinem Programm haben möchte. Das geht mit den Standardfunktionen nicht, es gibt aber Möglichkeiten, hier durch geschickte Programmierung unter Verwendung von Kostümen zum Ziel zu kommen. Doch das ist wirklich ein separates Thema.

Abgesehen von Groß- und Kleinschreibung gibt es viele Fehlermöglichkeiten, wenn man eine freie Eingabe von Zeichenketten in seinem Projekt verwendet. Wenn z. B. in einer Liste ein Unternehmen namens Thorsten Schultze GmbH gefunden werden soll und man einfach nur eine Zeichenkette abfragt, können folgende Eingaben kommen:

  • Thorsten Schultze GmbH,
  • Thorsten Schultze GmbH,
  • Torsten Schulze GMBH,
  • Torsten Shultze,
  • T. Schultze GmbH & Co.,
  • Firma Schultze,
  • Fa. T. Schultze.

und viele mehr, der Fantasie sind kaum Grenzen gesetzt. Das alles ist kaum mit vertretbarem Aufwand abzufangen. Besser ist es, mit vorgegebenen Auswahlmöglichkeiten und viel Grafik und Mausorientierung zu arbeiten. Damit macht man auch dem Benutzer des Programms eine Freude.



Code zum Einbinden ins Forum:
[wiki=de:Benutzereingaben prüfen]Benutzereingaben prüfen[/wiki]