0

我正在为我的菜单使用while, switch,case语句,当它运行时它一直说输入选择,我知道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

4 回答 4

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是通知停止循环的任何整数。

于 2013-05-10T05:33:25.360 回答
2

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

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

在每个 "%d" 和 "%c" 的开头添加一个空格,因为scanf总是在缓冲区中留下换行符:

"%d"->" %d" 
"%c"->" %c"
于 2013-05-10T03:46:07.060 回答
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;
}

您还可以在以下位置找到相关讨论:

于 2013-05-10T05:44:09.963 回答
1

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

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

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

于 2013-05-10T03:48:39.840 回答