2016-10-30 2 views
-2

У меня есть этот кусок кода в C:C - код после включения в цикл игнорируется

for(int y = 1; y <= array_size; y++){   //outer loop starts here 
    for(int x = 1; x <= array_size; x++){  //inner loop starts here 

      switch(array[x][y]){ 
      case 1: dosomething; 
      case 2: dosomething; 
      case 3: dosomething; 
      } 

      makestuff;      //this line is ignored 
    }           //inner loop ends here 
    outerloop;        //outer loop - everything works fine  
}            //outer loop ends here 

и, как вы можете увидеть, если я использую переключатель, код после него просто игнорируются, несмотря на это все еще находится в внутренний цикл.

Но если переписать код так:

for(int y = 1; y <= array_size; y++){   //outer loop starts here 
    for(int x = 1; x <= array_size; x++){  //inner loop starts here 

     if(array[x][y]==1) 
      dosomething; 
     else if(array[x][y]==2) 
      dosomething; 
     else if(array[x][y]==3) 
      dosomething; 

      makestuff;      //works 
    }           //inner loop ends here 
    outerloop;        //outer loop - everything works fine    
}            //outer loop ends here 

это работает, как я ожидал. Это не проблема, если бы я использовал второй метод, но я просто хотел бы знать, почему первый метод не работает.

Благодарим за ответы.

+2

Пожалуйста, измените вопрос с кодом, который компилирует. – DeiDei

+0

Трудно сказать, но что произойдет, если вы положите заявления 'break' после каждого' dosomething' –

+2

Если эти блоки case заканчиваются 'break' и не содержат' continue' или переходов, они должны быть семантически эквивалентными if-else цепь внизу. https://ideone.com/daqyzN – PSkocik

ответ

0

Я не уверен, что вы делаете и как вы протестировали, но этот простой код работает нормально.

#include <stdio.h> 
#define array_size 2 
int main() { 
    int array[array_size][array_size]; 
    for (int i = 0; i < array_size; i++) { 
     for (int j = 0; j < array_size; j++) { 
      array[i][j] = i; 
     } 
    } 

    for (int y = 1; y <= array_size; y++) { 
     for(int x = 1; x <= array_size; x++) { 

      switch(array[x][y]) { 
       case 1: printf("One\n"); break; 
       case 2: printf("Two\n"); break; 
       case 3: printf("Three\n"); break; 
       default: printf("Nothing\n"); break; 
      } 

      printf("I'm not ignored\n"); 
     } 
    } 
    printf("END\n"); 
    return 0; 
} 

Выход:

One 
I'm not ignored 
Nothing 
I'm not ignored 
Nothing 
I'm not ignored 
Nothing 
I'm not ignored 
END