找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9959|回復: 4
收起左側

error:#121: a case label may only be used within a switch報錯問題

[復制鏈接]
ID:233756 發(fā)表于 2018-11-7 16:11 | 顯示全部樓層 |閱讀模式
這個switch用法一直報故障,請大神來指導

        uint8_t colour[30][3]={0};
        colour_R = 255;
        colour_G = 0;
        colour_B = 0;
         
        while(1)
        {               
                hour = 5;
                        
                minute = 5;
                        
                second = 5;
                        
                        switch(hour)
                        case 0: colour[0][0]=colour_G;colour[0][1]=colour_R;colour[0][2]=colour_B;break;
                        case 1: colour[1][0]=colour_G;colour[1][1]=colour_R;colour[1][2]=colour_B;break;
                        case 2: colour[2][0]=colour_G;colour[2][1]=colour_R;colour[2][2]=colour_B;break;
                        case 3: colour[3][0]=colour_G;colour[3][1]=colour_R;colour[3][2]=colour_B;break;
                        case 4: colour[4][0]=colour_G;colour[4][1]=colour_R;colour[4][2]=colour_B;break;
                        case 5: colour[5][0]=colour_G;colour[5][1]=colour_R;colour[5][2]=colour_B;break;
                        case 6: colour[6][0]=colour_G;colour[6][1]=colour_R;colour[6][2]=colour_B;break;
                        case 7: colour[7][0]=colour_G;colour[7][1]=colour_R;colour[7][2]=colour_B;break;
                        case 8: colour[8][0]=colour_G;colour[8][1]=colour_R;colour[8][2]=colour_B;break;
                        case 9: colour[9][0]=colour_G;colour[9][1]=colour_R;colour[9][2]=colour_B;break;

..\User\main.c(159): error:  #121: a case label may only be used within a switch一直提示這個錯誤。。。有點懵逼,不知道哪里錯了?

里面用到的變量再前面都聲明過了


回復

使用道具 舉報

ID:233756 發(fā)表于 2018-11-7 16:20 | 顯示全部樓層
..\User\main.c(159): error:  #121: a case label may only be used within a switch
回復

使用道具 舉報

ID:370231 發(fā)表于 2019-4-9 15:24 | 顯示全部樓層
switch的一般形式如下:
switch (表達式)
{
    case 常量表達式1:    語句1
    case 常量表達式2:    語句2
       ┇
    case 常量表達式n:    語句n
    default:        語句n+1
}
說明:
1) switch 后面括號內的“表達式”必須是整數類型。也就是說可以是 int 型變量、char 型變量,也可以直接是整數或字符常量,哪怕是負數都可以。但絕對不可以是實數,float 型變量、double 型變量、小數常量通通不行,全部都是語法錯誤。

2) switch 下的 case 和 default 必須用一對大括號{}括起來。

3) 當switch后面括號內“表達式”的值與某個case后面的“常量表達式”的值相等時,就執(zhí)行此case后面的語句。執(zhí)行完一個case后面的語句后,流程控制轉移到下一個case繼續(xù)執(zhí)行。如果你只想執(zhí)行這一個case語句,不想執(zhí)行其他case,那么就需要在這個case語句后面加上break,跳出switch語句。

再重申一下:switch是“選擇”語句,不是“循環(huán)”語句。很多新手看到break就以為是循環(huán)語句,因為break一般給我們的印象都是跳出“循環(huán)”,但break還有一個用法,就是跳出switch。

4) 若所有的 case 中的常量表達式的值都沒有與 switch 后面括號內“表達式”的值相等的,就執(zhí)行 default 后面的語句,default 是“默認”的意思。如果 default 是最后一條語句的話,那么其后就可以不加 break,因為既然已經是最后一句了,則執(zhí)行完后自然就退出 switch 了。

5) 每個 case 后面“常量表達式”的值必須互不相同,否則就會出現互相矛盾的現象,而且這樣寫造成語法錯誤。

6) “case常量表達式”只是起語句標號的作用,并不是在該處進行判斷。在執(zhí)行 switch 語句時,根據 switch 后面表達式的值找到匹配的入口標號,就從此標號開始執(zhí)行下去,不再進行判斷。

7) 各個 case 和 default 的出現次序不影響執(zhí)行結果。但從閱讀的角度最好是按字母或數字的順序寫。

8) 當然你也可以不要 default 語句,就跟 if…else 最后不要 else 語句一樣。但最好是加上,后面可以什么都不寫。這樣可以避免別人誤以為你忘了進行 default 處理,而且可以提醒別人 switch 到此結束了。
回復

使用道具 舉報

ID:978751 發(fā)表于 2021-11-27 13:10 | 顯示全部樓層
沒有大括號
回復

使用道具 舉報

ID:523866 發(fā)表于 2022-8-23 14:06 | 顯示全部樓層

唯一一個看出問題的牛皮
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表