德尔福在案例陈述中落空

Zio*_*Bit 6 delphi

在C中你可以做类似的事情

switch(x) {
  case 'a':
  case 'b': 
    printf("something");
  break;
  case 'c': 
    printf("else");
  break;
}
Run Code Online (Sandbox Code Playgroud)

而在Delphi我试过了两个

 case x of
   'a': 
   'b': writeln('something');
   'c': writeln('else');
 end;
Run Code Online (Sandbox Code Playgroud)

 case x of
   ['a','b']: writeln('something');
   'c': writeln('else');
 end;
Run Code Online (Sandbox Code Playgroud)

但他们俩都行不通.

我虽然有不同的解决方案,例如编写程序并将其称为'a'和'b',但我想知道是否有更好的解决方案.我也可以使用goto,像这样:

 case x of
   'a': goto labelCaseB;
   'b': begin
          labelCaseB:
          writeln('something');
        end;
   'c': writeln('else');
 end;
Run Code Online (Sandbox Code Playgroud)

并且它工作得很好,但在Delphi语言的case语句中,什么是"标准"解决方案?

当然,我的实际情况要复杂得多:在示例中,我会使用if-else;)

Dsm*_*Dsm 10

德尔福在案例陈述中没有落后.这是C和Delphi之间的主要区别之一.但在你的特殊情况下(抱怨双关语)你可以写

 case x of
   'a','b': begin
          writeln('something');
        end;
   'c': writeln('else');
 end;
Run Code Online (Sandbox Code Playgroud)

  • @ZioBit方括号语法在测试字符集时有效。例如:如果x在['a','b']中,则...将起作用。您还可以使用范围:如果x在['a'..'z']中,则...在某些情况下使用case语句可能非常有用,并且可能对您更好。问候, (2认同)
  • @MichaelVincent:仅供参考:你也可以在CASE中使用范围,即._'a", 'K' .. 'Q', 'Z':_ (2认同)