2015-11-29 2 views
2

В настоящее время я кодирование в C и используя переключатель & Гечи, так:Вернитесь к началу переключения (getch()) по умолчанию? (С)

c=getch(); 
switch(c) 
     { 
      case 17: 
      //something 
      break; 

      case 19: 
      //something else 
      break; 

      default: //loop to get the right "case" 
      break; 

     } 

Однако, я хочу, чтобы мой цикл переключателя в случае мы получаем в «по умолчанию». Что-нибудь существует для этого? Или я должен сделать «while (x! = 10)», например, зацикливая весь мой коммутатор, и если я перейду к умолчанию, x == 10 ??

Большое спасибо!

+0

вы можете использовать 'goto', но люди обескуражить использовать' goto' – manetsus

ответ

6

Если вы нашли goto неприятную, вы можете создать фиктивный цикл и использовать continue после default:, чтобы заставить следующий цикл итерации:

do { 
    c = getch(); 
    switch(c) { 
    case 17: 
     //something 
     break; 
    // ... 
    default: 
     continue; 
    } 
} while (false); 
0

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

#include <stdio.h> 
#include <conio.h> 

int main() 
{ 
    char c; 
xx: 
    c=getch(); 
    switch(c) 
    { 
    case 17: 
     //something 
     break; 

    case 19: 
     //something else 
     break; 

    default: //loop to get the right "case" 
     goto xx; 
     break; 

    } 

    return 0; 
} 
+2

Гото это зло, особенно 'делать {}, а()' будет быть a) эффективными и b) более читаемыми. – nonchip

+0

@nonchip уверен, как OP упомянул о цикле while, я думал, что он может сделать это с помощью цикла, и ответ с циклом будет понятным. Я также упомянул, что это обескуражено, но хорошо знать о «гото» в случае чрезвычайной ситуации. – manetsus

3

Вы можете использовать do-while loop ,. Например

int done; 

do 
{ 
    done = 1; 

    c =getch(); 
    switch(c) 
    { 
     case 17: 
     //something 
     break; 

     case 19: 
      //something else 
      break; 

     default: //loop to get the right "case" 
      done = 0; 
      break; 
    } 
} while (!done); 
1

Для наилучшей практики кодирования, просто забывают, что goto существует.

Следующий код делает то, что вы хотите

int done = 0; // indicate not done 
while(!done) 
{ 
    done = 1; // indicate done 
    //c=getch(); not portable, do not use 
    c = getchar(); 

    switch(c) 
    { 
     case 17: 
     //something 
     break; 

     case 19: 
     //something else 
     break; 

     default: //loop to get the right "case" 
      done = 0; // oops, not done, so stay in loop 
     break; 
    } // end switch 
} // end while 
Смежные вопросы