2013-11-25 21 views
-1

因此,我有一个随机的单词生成器,它使用开关随机地将一个单词分配给一个变量。

但是,经过一些测试后,我发现它总是运行'情况2',并且从不情况0,1或默认。开关总是运行相同的case语句Xcode 5

这里是我的代码:

int randWord1 = rand() % 2; 
switch (randWord1) { 
    case 0: 
     mainTextView.text = @"1"; 


    case 1: 
     mainTextView.text = @"2"; 


    case 2: 
     mainTextView.text = @"3"; 

    break; 

    default: 
    break; 
} 

编辑:

有问题关闭在代码中的拼写错误之后,我发现这个问题是,我已经忘了后添加break;声明每个case X:声明。

+0

请与实际上是相关的(这样的标签更新标记为正在使用的语言)。 – rmaddy

+1

这可能适用于3种情况,但对于较长的列表来说这不是一个好方法。相反,你应该把这些单词放到一个数组中,并将随机数传递给objectAtIndex:来获得一个随机单词。 – rdelmar

回答

3

这是你错过了什么:

Case 0 { 
mainTextView.text = @"1"; 
break; 
} 

Case 1 { 
mainTextView.text = @"2"; 
break; 
} 

Case 2 { 
mainTextView.text = @"3"; 
break; 
} 
Default: 

注意的break每个Case x

C,如果您在下一个Case之前没有正确陈述break陈述,则将执行每个案例。在你的情况下,由于Case 2是其中包含任何可执行语句的最后一种情况,因此总是会看到mainTextView.text设置为3。如果,因为参数的缘故,你有

Default: { 
mainTextView.text = @"foo"; 
break; 
} 

你会看到foo打印每一次,因为没有经过breakCase 2:

+0

哦!谢谢,我认为休息时间超出了括号 – DeveloperACE

+0

,只要它们出现在案例的可执行范围内,这应该无关紧要。 – unspokenblabber

+0

我是否必须在每个case语句之后放置“{}”? – DeveloperACE

1

即使看起来违反直觉/不必要,你必须在每种情况下打破。

+0

我想我可能已经这样做了......但是只是为了澄清当你休息时打破:? – DeveloperACE

+0

是的,正确的。在每个案件执行其逻辑之后,休息一下;在下一个案例保证退出交换机之前。 – diatrevolo

+0

是的,但为什么它总是运行情况2? – DeveloperACE