Когда вызывается функция main (), программа завершается. Как я могу это исправить? - PullRequest
0 голосов
/ 04 августа 2020

Мне нужно написать программу c для управления бронированием. Когда я вызываю основную функцию, программа завершается без продолжения. Как исправить эту ошибку? (Я не написал всю программу)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(){
 int i, j, day, x;
 char session[10];
 int array[2][5] = {{0,0,1,0,1},{1,1,0,0,0}};
 char response,ans,choice;

 printf("**************** WELCOME TO NAT RESERVATION SYSTEM ****************");

 printf("\n\nCHOOSE WHAT TO DO");

 printf("\n\n\t\tA.\t\tBOOK THE THEATER");
 printf("\n\t\tB.\t\tCHECK RESERRVATIONS");
 printf("\n\t\tC.\t\tREMOVE RESERVATIONS");
 printf("\n\t\tD.\t\tCALCULATE INCOME");
 printf("\n\t\tE.\t\tEXIT");

 printf("\n\nYOUR RESPONSE\t\t:  ");
 scanf("%c",&response);


 switch (response){
   case 'A': printf("\n\nBOOK THE THEATER"); break;
   case 'B': printf("\n\nCHECK RESERRVATIONS"); break;
   case 'C': printf("\n\nREMOVE RESERVATIONS"); break;
   case 'D': printf("\n\nCALCULATE INCOME"); break;
   case 'E': printf("\n\nEXIT"); break;
 }

 if (response == 'A'){

  printf("\n\nCHOOSE A DAY   :   ");
  scanf("%d",&day);
  j = day -1;

  printf("YOUR SESSION     :   ");
  scanf("%c",session);
  fgets(session,10,stdin);

  if(strcmp(session,"MORNING")){
    i = 0;
  }else if(strcmp(session,"AFTERNOON")){
    i = 1;
  }else{
    printf("PLEASE ENTER MORNING OR AFTERNOON");
  }

  if(array[i][j] == 0){
    printf("\n\nTHE SESSION IS AVAILABLE.\nDO YOU WANT TO CONFIRM THE BOOKING?(Y/N)   :   ");
    scanf("%c",&ans);

Я хочу, чтобы программа распечатала главное меню. Итак, я вызвал здесь функцию main ().

    if(ans == 'Y' || ans == 'y'){
      array[i][j] = 1;
      printf("\nYOUR BOOKING WAS SUCCESSFUL!\n\n");
      main();
    }
  }else if(array[i][j] == 1){
    printf("\n\nTHE SESSION IS NOT AVAILABLE.");
    printf("DO YOU WANT TO TRY ANOTHER SESSION?(Y/N):  ");
    scanf("%c",&ans);

    if(ans == 'Y' || ans == 'y'){
      main();
    }else if(ans == 'N' || ans == 'n'){
      printf("THANK YOU! HAVE A NICE DAY!");
      exit(0);
    }
  }  
 }
}

Я попытался использовать while l oop. Я не знаю, что поставить в скобки. Пожалуйста, помогите мне. Я новичок в программировании на C, так как большинство из них я изучил онлайн.

while(1){
 printf("**************** WELCOME TO NAT RESERVATION SYSTEM ****************");


printf("\n\nCHOOSE WHAT TO DO");

printf("\n\n\t\tA.\t\tBOOK THE THEATER");
printf("\n\t\tB.\t\tCHECK RESERRVATIONS");
printf("\n\t\tC.\t\tREMOVE RESERVATIONS");
printf("\n\t\tD.\t\tCALCULATE INCOME");
printf("\n\t\tE.\t\tEXIT");

printf("\n\nYOUR RESPONSE\t\t:  ");
scanf("%c",&response);


switch (response){
  case 'A': printf("\n\nBOOK THE THEATER"); break;
  case 'B': printf("\n\nCHECK RESERRVATIONS"); break;
  case 'C': printf("\n\nREMOVE RESERVATIONS"); break;
  case 'D': printf("\n\nCALCULATE INCOME"); break;
  case 'E': printf("\n\nEXIT"); break;
}

if (response == 'A'){

  printf("\n\nCHOOSE A DAY   :   ");
  scanf("%d",&day);
  j = day -1;

  printf("YOUR SESSION     :   ");
  scanf("%c",session);
  fgets(session,10,stdin);

  if(strcmp(session,"MORNING")){
    i = 0;
  }else if(strcmp(session,"AFTERNOON")){
    i = 1;
  }else{
    printf("PLEASE ENTER MORNING OR AFTERNOON");
  }

  if(array[i][j] == 0){
    printf("\n\nTHE SESSION IS AVAILABLE.\nDO YOU WANT TO CONFIRM THE BOOKING?(Y/N)   :   ");
    scanf("%c",&ans);

    if(ans == 'Y' || ans == 'y'){
      array[i][j] = 1;
      printf("\nYOUR BOOKING WAS SUCCESSFUL!\n\n");
      continue;
      main();
    }
  }
  if(array[i][j] == 1){
    printf("\n\nTHE SESSION IS NOT AVAILABLE.");
    printf("DO YOU WANT TO TRY ANOTHER SESSION?(Y/N):  ");
    scanf("%c",&ans);

    if(ans == 'Y' || ans == 'y'){
      continue;
      main();
    }else if(ans == 'N' || ans == 'n'){
      printf("THANK YOU! HAVE A NICE DAY!");
      exit(0);
    }
  }  
}

1 Ответ

0 голосов
/ 04 августа 2020

Ваша исходная программа без while и continue, кажется, работает нормально, если вы используете scanf со строкой формата " %c", то есть вставьте пробел перед знаком процента. Это заставляет программу пропускать начальные пробелы. Без начального пробела в строке формата символы новой строки не будут пропущены.

ПРИМЕЧАНИЕ. Также лучше печатать новую строку в конце строки. Например, если я выберу B, вывод программы не будет заканчиваться новой строкой, поэтому на машине, отличной от Windows, командная строка (в моем случае знак доллара) отображается в той же строке, что и вывод:

CHECK RESERRVATIONS$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...