2016-07-21 2 views
6

In C können Sie so etwas wieDelphi fallen durch in case-Anweisung

switch(x) { 
    case 'a': 
    case 'b': 
    printf("something"); 
    break; 
    case 'c': 
    printf("else"); 
    break; 
} 

während in Delphi zu tun habe ich versucht, sowohl

case x of 
    'a': 
    'b': writeln('something'); 
    'c': writeln('else'); 
end; 

und

case x of 
    ['a','b']: writeln('something'); 
    'c': writeln('else'); 
end; 

aber beide von ihnen nicht Arbeit.

ich von verschiedenen Lösungen, z.B. ich schreibe eine Prozedur und nenne sie sowohl für 'a' als auch für 'b', aber ich habe mich gefragt, ob es eine bessere Lösung gibt. Ich könnte auch eine goto wie folgt verwenden:

case x of 
    'a': goto labelCaseB; 
    'b': begin 
      labelCaseB: 
      writeln('something'); 
     end; 
    'c': writeln('else'); 
end; 

und es funktioniert perfekt, aber was ist der „Standard“ Lösung für den Fall durch in der Case-Anweisung in Delphi?

Natürlich mein eigentlicher Fall ist viel komplizierter: Im Beispiel würde ich verwendet habe eine if-else;)

+1

frage ich mich, dass eine solche Frage hat upvoted worden - Hilfe klare Beschreibung und Beispiele enthält http://docwiki.embarcadero.com/RADStudio/Berlin/en/Declarations_and_Statements_ (Delphi) #Case_Statements – MBo

+0

Normalerweise überprüfe ich die f1/ctrl-f1 Hilfe, dann google es, dann komme ich direkt hierher, und wenn ich noch nichts finde, frage ich. Aber ich habe vergessen, dass Hilfe auch für die Pascal-Sprache verfügbar ist, und nicht nur für VCL-bezogene Fragen :) – ZioBit

Antwort

9

Delphi muss nicht durch die Fall Aussagen fallen. Es ist einer der Hauptunterschiede zwischen C und Delphi. Aber in Ihrem Fall (sorry über das Wortspiel) Sie können schreiben

case x of 
    'a','b': begin 
      writeln('something'); 
     end; 
    'c': writeln('else'); 
end; 
+0

Wow, ich frage mich jetzt, warum ich ['a', 'b'] und nicht 'a', 'b "... Vielleicht, weil ich mit" Format "verrückt wurde. Danke, ich werde es akzeptieren, sobald ich kann (immer noch 9 Minuten;) – ZioBit

+1

@ZioBit Die Syntax der eckigen Klammer ist gültig, wenn Sie nach Zeichenklassen testen. Zum Beispiel: wenn x in ['a', 'b'] dann ... wird funktionieren. Sie können auch Bereiche verwenden: Wenn x in ['a' .. 'z'] dann ... Es kann sehr nützlich sein und möglicherweise besser für Sie, dass eine case-Anweisung in einigen Situationen. Grüße, –

+2

@MichaelVincent: FYI: Sie können Bereiche in CASE auch verwenden, dh. _'a ',' k '..' q ',' z ': _ – HeartWare