切换语句不按我的意料行事

这段代码有什么问题:

switch (n) { case 0: strcpy(resultString, "Zero"); case 1: strcpy(resultString, "One"); case 2: strcpy(resultString, "Two"); case 3: strcpy(resultString, "Three"); case 4: strcpy(resultString, "Four"); case 5: strcpy(resultString, "Five"); case 6: strcpy(resultString, "Six"); case 7: strcpy(resultString, "Seven"); case 8: strcpy(resultString, "Eight"); case 9: strcpy(resultString, "Nine"); } printf("%s", resultString); 

无论n的值如何,它总是打印“Nine”。 我究竟做错了什么??

每个案例结束时都需要一个break语句。 否则控制直接进入下一个案例。

将您的代码更改为:

 switch (n) { case 0: strcpy(resultString, "Zero"); break; case 1: strcpy(resultString, "One"); break; case 2: strcpy(resultString, "Two"); break; case 3: strcpy(resultString, "Three"); break; case 4: strcpy(resultString, "Four"); break; case 5: strcpy(resultString, "Five"); break; case 6: strcpy(resultString, "Six"); break; case 7: strcpy(resultString, "Seven"); break; case 8: strcpy(resultString, "Eight"); break; case 9: strcpy(resultString, "Nine"); break; } printf("%s", resultString); 

您可以在此处或在C语言的任何书籍中找到switch语句。

你需要在每个案件后打破。

 case 0: do soemthing; break; case 1: do something; break; 

在许多托管语言中,它不会让“一个案例落入另一个案例”,并抛出错误。 但C喜欢让你做任何你想做的事!

你错过了break; 在每个案件之后

 Example : case 0: strcpy(resultString, "Zero");break; .. .. case 8: .... ; break; .. 

从标准:

6.4.2 switch语句[stmt.switch]

大小写和默认标签本身并不会改变控件的流量,这些标签在这些标签上继续畅通无阻。 要退出switch ,请参阅break (6.6.1)。

6.6.1中断声明[stmt.break]

break语句只能在iteration-statement或switch语句中出现,并导致最小的封闭iteration-statement或switch语句终止; 控制权传递给终止语句后的语句(如果有)。

这意味着你不会在每种case使用break ,你的程序将在第一种case输入匹配条件,并将继续执行switch每一行直到结束。

你应该做的事情如下:

 switch( n ) { case 0: // ... break; // <- Note the break //... default: // ... }