Turbo Pascal - Case Statements mit Wörtern |
INFO
Grünschnabel
Dabei seit: 18.09.2017
Beiträge: 6
|
|
Turbo Pascal - Case Statements mit Wörtern |
|
Meine Frage:
Hallo,
Ich versuche gerade in Turbo Pascal ein case statement zu schreiben:
case wunsch of
'Kaffee': begin
Writeln('Bezahlen Sie 1,00 EUR fuer: ',wunsch);
Das ist der case-Teil. Der Rest ist egal, da der Error immer hier bei diesem case-Statement kommt.
Die Variable wunsch ist ein String. Mit char üwrde das ja nicht gehen, da char nur mit einzelnen Zeichen geht, anstatt mit mehreren. Wenn ich nun versuche mein Programm auszugeben, dann sagt TP: Error 39: Ordinal Expression expected.
Vielen Dank im vorraus.
Meine Ideen:
Keine weiteren Ideen
|
|
18.09.2017 23:38 |
|
|
as_string
Haudegen
Dabei seit: 06.11.2013
Beiträge: 639
Herkunft: Heidelberg
|
|
Hallo!
Ich habe schon 25 Jahre kein Pascal mehr gemacht, aber kann man case-of nicht nur bei ganzzahligen und enum-Werten verwenden? Eine char-Variable ist dabei ein Ganzzahlwert, weil es ja einem Byte mit 256 verschiedenen Werten entspricht. Aber ein String kann ja eine beliebige Anzahl von Zeichen haben, so dass es keine direkte Konvertierung zu einer Ganzzahl geben kann.
Pascal macht da einen einfachen Integer-Vergleich am Ende. Ein Stringvergleich ist viel aufwändiger.
Gruß
Marco
|
|
19.09.2017 07:35 |
|
|
INFO
Grünschnabel
Dabei seit: 18.09.2017
Beiträge: 6
|
|
Wie mache ich das dann mit einem String??
|
|
19.09.2017 17:29 |
|
|
|
Zunächst hat as_string Recht, case und string verträgt sich nicht immer, wie in diesem Forenbeitrag von 2012 geschrieben.
Mittlerweile gehen auch strings, siehe Doku.
"The constants appearing in the various case parts must be known at compile-time, and can be of the following types : enumeration types, Ordinal types (including chars) or string types"
Turbo Pascal ist aber nicht Free Pascal und kann das nicht.
Da musst du wohl ein if-else machen (du könntest ein case mit dem Hashwert des string machen, aber dazu würde ich nicht raten).
__________________ Syntax Highlighting fürs Board (Link)
|
|
20.09.2017 16:46 |
|
|
INFO
Grünschnabel
Dabei seit: 18.09.2017
Beiträge: 6
|
|
Und könntest du mir auch erklären warum bei einem If Else Statement Turbo Pascal den Error 42 (Error 42: Error in expression) bei -> else<- von if else ausfweist?
Mein if else:
if x = 'Kaffee' then
begin
writeln('Dein Getränk: Kaffee');
writeln('Bezahle: 1.00 EUR');
readln(preis);
Error 42: Error in expression
(hier)
if else x = 'Wasser' then
writeln('Dein Getränk: Wasser');
writeln('Bezahle: 0.10 EUR);
readln(preis);
|
|
20.09.2017 17:14 |
|
|
INFO
Grünschnabel
Dabei seit: 18.09.2017
Beiträge: 6
|
|
Hi,
Wenn ich das mache, dann kommt ein anderer Error
.
Error 113: Error in Statement.
Also das Statement:
...
if x = 'Kaffee ' then
begin
writeln('Bezahle 1.00 EUR fuer Kaffee');
readln(wahl);
end;
else if x = 'Wasser' then
begin
writeln('Bezahle 0.10 EUR fuer Wasser');
readln(wahl);
end;
...
|
|
20.09.2017 19:43 |
|
|
as_string
Haudegen
Dabei seit: 06.11.2013
Beiträge: 639
Herkunft: Heidelberg
|
|
Ich weiß nicht, ob man in Pascal einfach den Gleichheitsoperator für Stringvergleiche verwenden kann.
Man kann aber auf jeden Fall die Funktion CompareStr verwenden. Beide Strings sind gleich, wenn die Funktion 0 zurück gibt.
Gruß
Marco
|
|
20.09.2017 21:39 |
|
|
|