SORU
6 EKİM 2008, PAZARTESİ


Deyimi C fallthrough anahtarı#?

Switch deyimi fallthrough switch vs if/else if yapıları sevmek için kişisel benim büyük nedenlerinden biri. Örnek olarak:

static string NumberToWords(int number)
{
    string[] numbers = new string[] 
        { "", "one", "two", "three", "four", "five", 
          "six", "seven", "eight", "nine" };
    string[] tens = new string[] 
        { "", "", "twenty", "thirty", "forty", "fifty", 
          "sixty", "seventy", "eighty", "ninety" };
    string[] teens = new string[]
        { "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen",
          "sixteen", "seventeen", "eighteen", "nineteen" };

    string ans = "";
    switch (number.ToString().Length)
    {
        case 3:
            ans  = string.Format("{0} hundred and ", numbers[number / 100]);
        case 2:
            int t = (number / 10) % 10;
            if (t == 1)
            {
                ans  = teens[number % 10];
                break;
            }
            else if (t > 1)
                ans  = string.Format("{0}-", tens[t]);
        case 1:
            int o = number % 10;
            ans  = numbers[o];

            break;
        default:
            throw new ArgumentException("number");
    }
    return ans;
}

Akıllı insanlar string[]s işlevi dışında beyan edilmelidir çünkü yalaka: Peki, bu sadece bir örnek.

Derleyici aşağıdaki hata ile başarısız:

Control cannot fall through from one case label ('case 3:') to another
Control cannot fall through from one case label ('case 2:') to another

Neden? Ve orada ifüç s kalmadan bu tür davranış almak için herhangi bir yolu var mı?

CEVAP
6 EKİM 2008, PAZARTESİ


(Kopyala/) answer I provided elsewhere bir yapıştır

Düşme ile switch-cases elde edilebilir bir kod bir case (case 0), ya da kullanma özel goto case (case 1) veya goto default (case 2) formlar:

switch (/*...*/) {
    case 0: // shares the exact same code as case 1
    case 1:
        // do something
        goto case 2;
    case 2:
        // do something else
        goto default;
    default:
        // do something entirely different
        break;
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • FrameCityJackal

    FrameCityJac

    4 Aralık 2010
  • MisterBrightside

    MisterBright

    24 Mart 2006
  • Troy Hunt

    Troy Hunt

    29 EYLÜL 2011