Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - probleme mit case-Anweisung


malibu85 - Fr 21.12.07 15:40
Titel: probleme mit case-Anweisung
Hallo, ich habe ein Problem mit einer case-anweisung. Ich möchte über ein Edit-feld ein Zeichen einlesen. Wenn die gewünschten Zeichen A oder x eingegeben wurde, soll der dazu gehörige Text auch ausgegeben werden wenn keines der beiden Zechen eingegeben wurde, dann soll die else - anweisung ausgeführt werden. Irgendwie springt mein Programm sofort in die else-anweisung und gibt bei jeder eingabe den Text der else-anweisung aus obwohl die richtigen zeichen eingegeben wurden

hier der quelltext


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
var
  Form1: TForm1;
  c:char;
  s:string;

implementation

{$R *.nfm}

procedure TForm1.Button1Click(Sender: TObject);
begin

s:=edit1.Text;

case c of
'A':s:='Sie haben ein großes A eingegeben';
'x':s:='Sie haben ein x gedrückt';

else
    s:='Dies ist eine ungültige Eingabe';
end;

label1.caption:=s;

end;


Kroko - Fr 21.12.07 16:00

Du hast c nicht zugewiesen sonder s!


Calculon - Fr 21.12.07 16:15


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var
  s: string;
begin
    case UpCase(key) of
        'A': s:='Sie haben ein großes A eingegeben';
        'X': s:='Sie haben ein x gedrückt';
      else
        s := 'Dies ist eine ungültige Eingabe';
    end;
  Label1.Caption := s;
end;


malibu85 - Fr 21.12.07 17:08

so ganz habe ich das noch nicht verstanden. Das Beispiel von oben ist aus enem Buch und ich habe es 1 ´zu 1 abgetippt und es hat nicht funktioniert. Ich bekomme immer Fehlermeldungen bezüglich der Datentypen char und integer oder string und integer. Aus diesem Grug abe ich ein anders Beispiel abgetippt auch 1:1. Auch hier bekomme ich die Fehlermeldung [Pascal Fehler] Unit1.pas(36): E2010 Inkompatible Typen: 'Integer' und 'Char'

dabei ist mir der Quelltext ziemlich logisch aufgebaut...kann mir nicht vorstellen, dass es nicht klappt
hier der Quelltext

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
var
  Form1: TForm1;
  eingabe: integer;
  ausgabe:string;

implementation

{$R *.nfm}

procedure TForm1.Button1Click(Sender: TObject);
begin

eingabe:=StrToInt(edit1.Text);

case eingabe of
'1':ausgabe:='Sie haben eine 1 eingegeben';
'2':ausgabe:='Sie haben eine 2 eingegeben';

end;

label1.Caption:=ausgabe;

end;


elundril - Fr 21.12.07 17:13

weg mit den Hochkommas bei der Case-anweisung. Hochkommas signalisieren dem Compiler immer einen String. Da du aber interger hast regt sich der Compiler auf. Also so bitte:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
var
  Form1: TForm1;
  eingabe: integer;
  ausgabe:string;

implementation

{$R *.nfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
eingabe:=StrToInt(edit1.Text);

case eingabe of
  1:ausgabe:='Sie haben eine 1 eingegeben';
  2:ausgabe:='Sie haben eine 2 eingegeben';
end;

label1.Caption:=ausgabe;

end;


malibu85 - Fr 21.12.07 17:16

zum Glück jetzt stimmt es..war wohl doch nicht 1:1 abgetippt :)
danke