为什么我的代码没有正确读取Switch语句中的值?代码如下。
我已经验证它正确迭代,一次一个字符,并且数字字符看起来与条件匹配。但是每个字符都由默认值处理,没有条件处理。
Local StringVar inString := "X12y1023" ;
Local StringVar outString;
Local NumberVar i :=1;
...
While i <= Length(inString)
Do (
Local StringVar inC := mid(inString, i, 1);
Local StringVar outC;
Switch(
inC = "1", outC := "!",
inC = "2", outC := "Z",
inC = "3", outC := "E",
...
inC = "0", outC := "O",
True, outC := inC
);
outString := outString + outC;
i := i+1;
);
outString;
为了证明在默认条件之上的任何点都没有读取数字字符(并且每次迭代的长度只有一个字符),我按如下方式修改了True:
True, outC := inC + "_" + Cstr(Length(inC)) + ", "
输出生成 X_1,1_1,2_1,y_1,1_1,0_1,2_1,3_1,
我错过了什么?
由于
答案 0 :(得分:0)
switch
声明并不意味着以您尝试使用它的方式使用;它意味着返回简单值而不是更复杂的语句,如变量赋值。我猜你所看到的行为可能只是该功能的具体实施的副产品。
相反,您可以使用case-statement
或重新排列switch
,以便它仅用于返回简单值。
//Your code changed to use a case-statement
Local StringVar inString := "X12y1023" ;
Local StringVar outString;
Local NumberVar i :=1;
While i <= Length(inString)
Do (
Local StringVar inC := mid(inString, i, 1);
Local StringVar outC;
Select inC
Case "1" : outC:="!"
Case "2" : outC:="Z"
Case "3" : outC:="E"
Case "0" : outC:="O"
Default : outC:=inC;
outString := outString + outC;
i := i+1;
);
outString;
或者
//Your code rearranged to use switch as intended
Local StringVar inString := "X12y1023" ;
Local StringVar outString;
Local NumberVar i :=1;
While i <= Length(inString)
Do (
Local StringVar inC := mid(inString, i, 1);
outString := outString +
switch(
inC = "1", "!",
inC = "2", "Z",
inC = "3", "E",
inC = "0", "O",
True, inC);
i := i+1;
);
outString;