簡體   English   中英

當我編譯我的程序時,為什么它會抱怨“復合語句末尾的標簽”?

[英]When I compile my program, why does it complain with "label at end of compound statement"?

當我嘗試編譯我的代碼時,我不斷收到此錯誤消息:

badges.c: In function ‘badgeAnyColor’:
badges.c:335: error: label at end of compound statement

為了幫助您了解抱怨的地方,抱怨位於 switch 語句的最后一行,它說:“case 5:”。 我還有一個問題是我是否正確地執行了 switch 語句的語法(我完全不熟悉將 switch 語句與 if/else 語句一起使用)幫助將不勝感激!

這是我的代碼:

int badgeAnyColor(int x, int y) {
       int bronzebadges, northbadges, northeastbadges, northwestbadges, eastbadges,
          westbadges, southbadges, southeastbadges, southwestbadges, polybadge;
    
       double fs, ht, fp, sunexp, irrexp;
    
       if ((x >= 1 && x <= 20) && (y >= 1 && y <= 20)) {
          fs = fieldScore(x, y);
          ht = harvestTime(x, y);
          fp = fieldProfit(x, y);
          sunexp = sunExposure(x, y);
          irrexp = irrigationExposure(x, y);
          bronzebadges = countBadges(x, y);
          northbadges = countBadges(x, y + 1);
          northeastbadges = countBadges(x + 1, y + 1);
          northwestbadges = countBadges(x - 1, y + 1);
          eastbadges = countBadges(x + 1, y);
          westbadges = countBadges(x - 1, y);
          southbadges = countBadges(x - 1, y - 1);
          southeastbadges = countBadges(x + 1, y - 1);
          southwestbadges = countBadges(x - 1, y - 1);
    
          switch (bronzebadges) {
             case 0: {
                if (x == 1 && y == 1) {
                   if (northbadges == 0 && northeastbadges == 0 &&
                      eastbadges == 0) {
                      polybadge = 1;
                   }
                   else {
                      polybadge = 0;
                   }
                }
                if (x == 20 && y == 1) {
                   if (northbadges == 0 && northwestbadges == 0 &&
                      westbadges == 0) {
                      polybadge = 1;
                   }
                   else {
                      polybadge = 0;
                   }
                }
                if (x == 1 && y == 20) {
                   if (eastbadges == 0 && southeastbadges == 0 &&
                      southbadges == 0) {
                      polybadge = 1;
                   }
                   else {
                      polybadge = 0;
                   }
                }
                if (x == 20 && y == 20) {
                   if (westbadges == 0 && southwestbadges == 0 &&
                      southbadges == 0) {
                      polybadge = 1;
                   }
                   else {
                      polybadge = 0;
                   }
                }
                if ((x >= 2 && x <= 19) && y == 1) {
                   if (westbadges == 0 && northwestbadges == 0 && northbadges == 0
                      && northeastbadges == 0 && eastbadges == 0) {
                      polybadge = 1;
                   }
                   else {
                      polybadge = 0;
                   }
                }
                return polybadge;
             }
             case 1: {
                if (fs >= 20) {
                   polybadge = 1;
                }
                else {
                   polybadge = 0;
                }
                return polybadge;
             }
             case 2: {
                if (fp <= 0 || ht < 80 || sunexp > irrexp) {
                   polybadge = 1;
                }
                else {
                   polybadge = 0;
                }
                return polybadge;
             }
             case 3: {
                if ((x >= 2 && x <= 19) && y == 1) {
                   if (((westbadges + northbadges) >= 2) || ((northbadges +
                      eastbadges) >= 2) || ((westbadges + eastbadges) >= 2)) {
                      polybadge = 1;
                   }
                   else {
                      polybadge = 0;
                   }
                }
                if (x == 1 && y == 1) {
                   if ((northbadges + eastbadges) >= 2) {
                      polybadge = 1;
                   }
                   else {
                      polybadge = 0;
                   }
                }
                if (x == 20 && y == 1) {
                   if ((northbadges + westbadges) >= 2) {
                      polybadge = 1;
                   }
                   else {
                      polybadge = 0;
                   }
                }
                if (x == 1 && y == 20) {
                   if ((southbadges + eastbadges) >= 2) {
                      polybadge = 1;
                   }
                   else {
                      polybadge = 0;
                   }
                }
                if (x == 20 && y == 20) {
                   if ((southbadges + westbadges) >= 2) {
                      polybadge = 1;
                   }
                   else {
                      polybadge = 0;
                   }
                }
                if ((x >= 2 && x <= 19) && y == 20) {
                   if (((westbadges + southbadges) >= 2) || ((southbadges +
                      eastbadges) >= 2) || ((westbadges + eastbadges) >= 2)) {
                      polybadge = 1;
                   }
                   else {
                      polybadge = 0;
                   }
                }
                else {
                   if (((northbadges + westbadges) >= 2) || ((westbadges +
                      southbadges) >= 2) || ((southbadges + eastbadges) >= 2) ||
                         ((northbadges + southbadges) >= 2) || ((westbadges +
                            eastbadges) >= 2)) {
                      polybadge = 1;
                   }
                   else {
                      polybadge = 0;
                   }
                }
                return polybadge;
             }
             case 4:
             case 5:
          }
       }
       else {
          polybadge = -1;
       }
       return polybadge;
    }

錯誤:復合語句末尾的標簽

上面的錯誤是因為這兩種情況

case 4:
case 5: 
    // here you need to add statement 
    //if you don't want to do anything simple break statement will work for you
    break;    

現在你沒有使用這兩種情況你也可以刪除它們。

如果我希望案例 3 中發生的相同事情也發生在案例 4 和 5 中怎么辦? 並感謝您的投入

您需要移動案例 4 和案例 5

case 3:
case 4:
case 5: 
//statements you written for case 3 

例如

switch(n)
{
    case 1:  
        printf("case 1");
        break;
    case 2:  
        printf("case 2");
        break;
    case 3:
    case 4:
    case 5: 
        printf("case 3 or 4 or 5");
        break;
    default: 
        printf("Wrong choice");
        break;

}

C 中的switch由一組必須包含語句的 case 標簽組成。 粗略地說,語句是以;結尾的東西; . 代碼如

switch (n){
    case 4:
    case 5:
}

無效,因為沒有要執行的語句。 這就是給你一個編譯錯誤的原因。 一種解決方法是寫

switch (n){
    case 4:
    case 5:
        ;
}

哪里; is 表示一個空語句。 請注意, C中的開關具有后續功能,這意味着case4運行到case5 這就是為什么在case4之后不需要空語句的case4

更好的是,只需刪除這些案例。

您必須指定案例 5(和案例 4)應該發生什么; 現在什么都沒有,這就是它所抱怨的——你給它貼了一個案例標簽,但沒有告訴它如何處理那個案例。

如果您不想發生任何事情,您可以將機箱放在您的交換機之外。

復合語句末尾的標簽是case 5:沒有任何東西可以執行。 你需要的是至少break

case 4:
case 5:
    // do nothing
    break;

現在關於語法 - 它似乎是錯誤的。 首先 - 你不需要額外的代碼括號以防萬一。 其次 - 您確實需要在每個塊的末尾break ,除非您想“跌倒”到下一個案例分支。 如果確實需要,請添加一條評論,說明如下:

case 1:
    do_something();
    break;
case 2:
    do_something_else();
    /* fall-through */
case 3:
    and_something_else_more();
    break;
case 42:
    if (allow_easter_eggs) // like this
        printf("DON'T PANIC\n");
    break;

這將執行do_something()的情況下的1, do_something_else()and_something_else_more()中的2例,只是and_something_else_more() 3。

最后,添加default標簽總是一個好主意。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM