2017-04-02 8 views
-1

ユーザがプログラムを終了したいかどうかを確認する関数yesを作成しようとしました。ユーザーが 'Y'または 'y'を入力すると、正常に終了し、無効な入力を入力すると正常終了しますが、ユーザーが 'N'または 'n'を入力するとメニューに戻りますが、入力は単にプログラムを終了します。私もdo whileループを試しましたが、同様の問題が発生しました。ここに私のコードは次のとおりです。これ以外の場合文終了プログラム

void GroceryInventorySystem(void) { 
    int menuSelection; 
    int exitSelection; 

    welcome(); 
    printf("\n"); 

    while (menuSelection != 0) 
    { 
     menuSelection = menu(); 
     switch (menuSelection) 
    { 
     case 1: 
     printf("List Items under construction!\n"); 
     pause(); 
     break; 

     case 2: 
     printf("Search Items under construction!\n"); 
     pause(); 
     break; 

     case 3: 
     printf("Checkout Item under construction!\n"); 
     pause(); 
     break; 

     case 4: 
     printf("Stock Item under construction!\n"); 
     pause(); 
     break; 

     case 5: 
     printf("Add/Update Item under construction!\n"); 
     pause(); 
     break; 

     case 6: 
     printf("Delete Item under construction!\n"); 
     pause(); 
     break; 

     case 7: 
     printf("Search by name under construction!\n"); 
     pause(); 
     break; 

     default: 
     printf("Exit the program? (Y)es/(N)o: "); 
     exitSelection = yes(); 
     break; 
     } 
    } 
} 

int yes(void) { 
     char YN; 
     begin:; 

     scanf("%c", &YN); 
     flushKeyboard(); 

     if (YN == 'Y' || YN == 'y') { 
     } 

     else if (YN == 'N' || YN == 'n') { 
     menu(); 
     } 

     else { 
      printf("Only (Y)es or (N)o are acceptable: "); 
      goto begin; 
     }   
} 

int menu(void) { 
    int option; 
    int firstSelection = 0; 
    int lastSelection = 7; 
    printf("\n1- List all items\n"); 
    printf("2- Search by SKU\n"); 
    printf("3- Checkout an item\n"); 
    printf("4- Stock an item\n"); 
    printf("5- Add new item or update item\n"); 
    printf("6- Delete item\n"); 
    printf("7- Search by name\n"); 
    printf("0- Exit program\n"); 
    printf("> "); 
    option = getIntLimited(firstSelection, lastSelection); 
    return option; 
} 

必要であれば、私は、コードの残りの部分を提供することができます。

+2

あなたは 'yes()'から意味のある** return **を提供していません。例えば。 if(YN == 'Y' || YN == 'y')は0を返し、それからnoブロックの 'return menu();' –

答えて

1

あなたのコードが何をするかによって見ると、これは、プログラムが実行され、誰かがメニューオプションを選択したときに発生するものである「0」:

  • menu()戻り0と出口ケースが実行menuselection
  • に割り当てられていますそしてyes()が実行され、ここで
  • ユーザーが 'N'選択し menu()は再び
  • と呼ばれ、選択されていないと何もされているものオプション10のリターンはそれで行われ
  • run()は行動がundefined
  • whileループを終了すると、あなたがあなたのケースを実行すると、まだmenuselection0

を再び実行するための実行の終わりに達しますループを終了すると、ユーザーが自分の考えを変えたことをループに伝える必要があります。

0
int yes(void) 
{ 
      char YN; 
      begin:; 

      scanf("%c", &YN); 
      flushKeyboard(); 

      if (YN == 'N' || YN == 'n') { 
        return 0; 
      } 

      else if (YN == 'Y' || YN == 'y') { 
        printf("Goodbye!\n"); 
      } 

      else { 
        printf("Only (Y)es or (N)o are acceptable: "); 
        goto begin; 
      } 
}