Operator ist auf den Operandentyp nicht anwendbar
lima-city → Forum → Programmiersprachen → Delphi & Pascal
buchstabenfolge
code
deklaration
dialog
eingabe
fehlermeldung
implementation
kleinbuchstaben
korrekte buchstabenfolge
meldung
not
operator
private private deklarationen
sender
string
type
windows
zeichen
ziffer
zustand
-
Hallo Leute,
bei folgendem Programm zeigt mir Delphi zwei Fehlermeldungen an.
Einmal Operator ist auf den Operandentyp nicht anwendbar und einmal Operator oder Semikolon fehlt.
begin if zeichen[1] not in (Grossbuchstaben) or (Kleinbuchstaben) then showmessage('Unkorrekt!') else begin for i := 2 to Length(zeichen) do if zeichen[i] not in (Grossbuchstaben) and (Ziffern) and (Kleinbuchstaben) and (unterlaenge) then showmessage('Unkorrekt'); else showmessage('Korrekte Buchstabenfolge'); end; end;
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Ohne dem Drumherum ist das nicht ganz so einfach. Zumindest die Deklaration der Variablen wäre sehr hilfreich, da ansonsten die Datentypen nicht ersichtlich sind .
Allgemein wäre das Posten der gesamten Funktion wünschenwert, da Deine Schreibweise / Einrückungen beim end-Schlüsselwort etwas, wie sag ich's denn, eigenwillig ist ... -
mein ganzer code:
unit buchstabenakzeptor_u; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; const ziffern = [0..9]; grossbuchstaben = ['A'..'Z']; kleinbuchstaben = ['a'..'z']; unterlaenge = ['_']; type TForm1 = class(TForm) bt_eingabe: TButton; bt_test: TButton; bt_ende: TButton; procedure bt_endeClick(Sender: TObject); procedure bt_eingabeClick(Sender: TObject); procedure bt_testClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; zeichen: string; implementation {$R *.dfm} procedure TForm1.bt_endeClick(Sender: TObject); begin close end; procedure TForm1.bt_eingabeClick(Sender: TObject); begin Zeichen:= inputbox('Buchstabenfolge eingeben','Eingabe',''); end; procedure TForm1.bt_testClick(Sender: TObject); var i : integer; begin if zeichen[1] not in (Grossbuchstaben) or (Kleinbuchstaben) then showmessage('Unkorrekt!') else begin for i := 2 to Length(zeichen) do if zeichen[i] not in (Grossbuchstaben) and (Ziffern) and (Kleinbuchstaben) and (unterlaenge) then showmessage('Unkorrekt'); else showmessage('Korrekte Buchstabenfolge'); end; end; end; end.
-
Also ich würd's mal so versuchen (ungeteste):
procedure TForm1.Button1Click(Sender: TObject); var i : integer; begin if not (zeichen[1] in (Grossbuchstaben)) or not (zeichen[1] in (Kleinbuchstaben)) then showmessage('Unkorrekt!') else begin for i := 2 to Length(zeichen) do if not (zeichen[i] in (Grossbuchstaben)) and not (zeichen[i] in (Ziffern)) and not (zeichen[i] in (Kleinbuchstaben)) and not (zeichen[i] in (unterlaenge)) then showmessage('Unkorrekt') else showmessage('Korrekte Buchstabenfolge'); end; end;
Weiters musst du im const-Abschnitt die Zeile ändern:
ziffern = ['0'..'9'];
Du kannst ja schwer ein Char (Zeichen(i)) mit einem Integer [0..9] vergleichen ... -
Danke, aber ich bekomme leider immer wieder die Meldung unkorrekt. Dabei möchte ich wenn z.B. das Wort Hallo eingegeben wird eine Ausgabe "Korrekt". Leider komme ich nicht auf die Lösung.
-
Ich habe ja auch nur auf's sprachliche hin gekuckt. Wenn ich mir das genauer anschaue, kann das von der Logik her gar nicht funktionieren, da du ja 1) für jedes einzelne Zeichen eine Meldung ausgibst und 2) ein Zeichen nicht in Grossbuchstaben, Ziffern, Kleinbuchstaben und Unterlänge gleichzeitig sein kann. Ein or wäre hier angebracht.
-
So habe es jetzt mit Zuständen gemacht.
Nur jetzt zeigt er mir die Fehlermeldung an Deklaration erwartet aber if gefunden.
unit buchstabenakzeptor_u; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; const ziffern = ['0'..'9']; grossbuchstaben = ['A'..'Z']; kleinbuchstaben = ['a'..'z']; unterlaenge = ['_']; type TForm1 = class(TForm) bt_eingabe: TButton; bt_test: TButton; bt_ende: TButton; procedure bt_endeClick(Sender: TObject); procedure bt_eingabeClick(Sender: TObject); procedure bt_testClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; type Tzustand = (z0,z1,z2); var Form1: TForm1; zeichen: string; implementation {$R *.dfm} procedure TForm1.bt_endeClick(Sender: TObject); begin close end; procedure TForm1.bt_eingabeClick(Sender: TObject); begin Zeichen:= inputbox('Buchstabenfolge eingeben','Eingabe',''); end; procedure TForm1.bt_testClick(Sender: TObject); var i : integer; zustand : Tzustand; begin if not (zeichen[1] in (Grossbuchstaben)) or not (zeichen[1] in (Kleinbuchstaben)) then zustand := z0 else zustand := z1; for i:=2 to length(zeichen) do if not (zeichen[i] in (Grossbuchstaben)) and not (zeichen[i] in (Ziffern)) and not (zeichen[i] in (Kleinbuchstaben)) and not (zeichen[i] in (unterlaenge)) or not (zustand=z1) then zustand := z0 else zustand := z2; end; if zustand = z0 then showmessage('Da war was falsch!') else showmessage('Gut gemacht. Das war richtig'); end; end.
-
Wieso machst du es dir eigentlich nicht einfach??
const allowed = [#32, '0'..'9', 'A'..'Z', '_', 'a'..'z'];
und die Prüfung:
procedure TForm1.Button1Click(Sender: TObject); var SpecialChars: Boolean; i: Integer; begin Zeichen := 'Just a Test$'; SpecialChars := False; for i := 1 to Length(Zeichen) do begin if not (Zeichen[i] in allowed) then SpecialChars := True; end; if SpecialChars then ShowMessage('nicht korrekt') else ShowMessage('korrekte Zeicheneingabe'); end;
Ist geprüft, sollte so bestens für dich funktionieren -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage