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 に答える
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 に答える