同时,切换,案例陈述

时间:2013-05-10 03:37:23

标签: c while-loop switch-statement

我正在为我的菜单使用whileswitchcase语句,当它运行时,它一直说输入选项,我知道while(1)会创建一个无限循环但有没有办法避免这种情况?

while(1)
{
    printf("\nEnter Choice \n");
      scanf("%d",&i);
      switch(i)
      {
            case 1:
            {
             printf("Enter value to add to beginning: ");
             scanf("%c",&value);
             begin(value);
             display();
             break;
             }
             case 2:
             {
             printf("Enter value to add last: ");
             scanf("%c",&value);
             end(value);
             display();
             break;
             }
             case 3:
             {
             printf("Value to enter before\n");
             scanf("%c",&loc);

             printf("Enter value to add before\n");
             scanf("%c",&value);

             before(value,loc);
             display();
             break;
             }
             case 4 :
             {
             display();
             break;
             }

      }
}

任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:2)

虽然(1)没问题。但是你必须有一些条件来完成循环。喜欢:

while(1){
.........
if(i == 0)
  break;
............
}

在每个“%d”和“%c”的开头添加空格,因为 scanf 始终在缓冲区中留下换行符:

"%d"->" %d" 
"%c"->" %c"

答案 1 :(得分:2)

替代解决方案,

int i = !SOME_VALUE;

while(i != SOME_VALUE)
{
   printf("\n\nEnter Choice ");
   scanf("%d",&i);

    switch(i)
    {
        case SOME_VALUE: break;
         .
         .
         .
       // the rest of the switch cases
    }
}

SOME_VALUE是通知停止循环的任何整数。

答案 2 :(得分:1)

或者,您可能希望在与输入相关的循环中放置一个条件,例如

do
{
    printf("\n\nEnter Choice ");
    scanf("%d",&i);
    // the rest of the switch is after this
} while (i != SOME_VALUE);

注意使用do循环,它在读入一个值之后测试最后的条件。

答案 3 :(得分:1)

我可能会写一个可以在循环中调用的函数:

while ((i = prompt_for("Enter choice")) != EOF)
{
     switch (i)
     {
     case ...
     }
}

prompt_for()功能可能是:

int prompt_for(const char *prompt)
{
    int choice;
    printf("%s: ", prompt);
    if (scanf("%d", &choice) != 1)
        return EOF;
    // Other validation?  Non-negative?  Is zero allowed?  Retries?
    return choice;
}

您还可以在以下网址找到相关讨论: