Turbo Pascal - Case Statements mit Wörtern

Neue Frage »

Auf diesen Beitrag antworten »
INFO 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
 
Auf diesen Beitrag antworten »
as_string

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
Auf diesen Beitrag antworten »
INFO

Wie mache ich das dann mit einem String??
Auf diesen Beitrag antworten »
eulerscheZahl

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).
 
Auf diesen Beitrag antworten »
INFO

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);
Auf diesen Beitrag antworten »
eulerscheZahl

Dein begin hat kein end (müsste vor den else kommen).
Und: es heißt "else if", nicht "if else".
Auf diesen Beitrag antworten »
INFO

Hi,

Wenn ich das mache, dann kommt ein anderer Error unglücklich .
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;

...
Auf diesen Beitrag antworten »
as_string

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
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »