回到默认的开关(getch())的开头? (C)

时间:2015-11-29 17:10:55

标签: c switch-statement getch

我目前正在用C编码并使用switch&残培, 像这样:

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 ??

提前多多感谢!

4 个答案:

答案 0 :(得分:6)

如果您发现goto令人反感,您可以创建一个虚拟循环并在continue之后使用default:来强制进行下一次循环迭代:

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

答案 1 :(得分:3)

你可以使用do-while循环。例如

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 );

答案 2 :(得分: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

答案 3 :(得分: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;
}