2013-08-10 2 views
-6

Выход компилятора gcc равен 0. Почему? Разве это не должно быть 3?Что выводится? Выход gcc равен 0. Пожалуйста, объясните?

int main() 
{ 
    f(3); 
    return 0; 
} 

int f(int t) 
{ 
    int c; 

    switch(t) 
    { 
    case 2: 
     c=2; 
    case 3: 
     c=3; 
    case 4: 
     c=4; 
    case 5: 
     c=5; 
    default: 
     c=0; 
    } 
    printf("%d",c); 
} 
+1

@ H2CO3: прочитайте руководство? Не будь глупым! ;) –

+2

@ MitchWheat Я знаю, я знаю ... Я элитарный элита со слишком высокими ожиданиями! :П –

ответ

1

Потому что вам не хватает break; заявление, в каждом из случаев. Это приводит к тому, что контроль падает до следующих случаев и в конечном итоге к делу default.

0

В коммутаторе нет оператора разрыва. И контроль течет до конца корпуса коммутатора. Значение t равно 3, а управление переходит к случаю 3, и поскольку там нет пролома, выполняются последующие строки. т.е. изменения с стоимостью от 3 до 4,5, а затем 0.

Read Kernighan and Dennis M. Ritchie C Book

1

Вам нужен break после каждого case:

switch(t) 
{ 
case 2: 
    c=2; 
    break; 
case 3: 
    c=3; 
    break; 
case 4: 
    c=4; 
    break; 
case 5: 
    c=5; 
    break; 
default: 
    c=0; 
    break; 
} 

В противном случае логика "проходит через" к остальной части заявления. Поэтому, когда коммутатор начинает выполнение, изначально c назначается 3, но затем он продолжается без break следующему оператору в цикле, поэтому сразу получает назначенные 4, 5, а затем 0. Окончательное значение поэтому равно 0. Если вы положите в break, тогда цикл оканчивается в этой точке, а значение c остается 3.

Смежные вопросы