切换语句不按我的意料行事
这段代码有什么问题:
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: // ... }