How to make reiterations using yes/no prompt?

2019-09-21 11:41发布

问题:

I realize a there is an issue with my data overflowing, but my main concern is trying to re run the program at the end to start all over. I've looked through multiple examples through this website, but couldn't really find one that fit my need.

I am not sure if you can see the first part of my code, but I essentially tried to use someones do while example for my program but i just can't figure it out.

If anyone could give any suggestions I would greatly appreciate it!

I'm sure if i keep at it i'll figure it out eventually, but i thought this would be a good question for this website.

Here is my source code:

#include <stdio.h>

int main (void) {
 int days;/* user will input number of days light will travel*/
 int answer;
 char buffer[256];

 printf(" \n" );
 printf("\t**-**-**-**Welcome to the LIGHT RAY!**-**-**-**\n");
 printf(" \n" );
 printf("\tTo get an idea of how unbelieveably fast light is!\n");
 printf("\t come climb aboard the LIGHT RAY!\n", );
 do
 {
   printf(" \n" );
   printf(" \n");
   printf("\tHow many days would you like to travel?\n");
   scanf("%d", &days);

   printf("processing...\n" ) /* fictional terminal computing information*/;
   sleep(2);
   printf("Initializing warp drive...\n" );
   sleep(1);

   printf("3\n" ) /* count down sequence*/;
   sleep(1);
   printf("2\n" );
   sleep(1);
   printf("1\n" );
   sleep(1);
   printf("SHROOOOM!\n" );
   sleep(1);

   int day_time=days * 86400/*86,400 seconds is equal to 1 day*/;
   int distance=day_time*186000/*light travels 186,000 miles per second!*/;



   printf("Congratulations, you have traveled %lld miles! \n",distance);
   printf("Would you like another go?(yes, no)\n" );
   scanf("%s\n", buffer );
 }while (strcmp(buffer, "yes") !=0);

 getchar();

 return 0;

}

回答1:

I think this should be enough to give you an idea:

#include<stdio.h>

int main(void){
    int     validate;
    char    menu_choice;


        validate = 0;
        do{
            printf("Would you like another go?(y/n):\t" );

            if(scanf(" %c", &menu_choice ) == 1){
                if((menu_choice=='y') || (menu_choice=='Y')){
                    printf("You choosed Yes\n\n\n");
                    validate = 1;
                }else if((menu_choice=='n') || (menu_choice=='N')){
                    printf("You choosed No\n\n\n");
                    validate = 2;
                }else{
                    printf("Wrong Input.\n\n\n");
                    validate = 0;
                }
            }
        }while( validate == 0 || validate == 1);

        printf("Goodbye\n");

    return 0;
}
Would you like another go?(y/n):  1
Wrong Input.
Would you like another go?(y/n):    k
Wrong Input.


Would you like another go?(y/n):    y
You choosed Yes


Would you like another go?(y/n):    Y
You choosed Yes


Would you like another go?(y/n):    N
You choosed No


Goodbye

For things like this i prefer instead something like this:

#include<stdio.h>

int checkInput(int min, int max){
    int option,check;
    char c;

    do{
        printf("Please type a number beetwen %d and %d:\t",min,max);

        if(scanf("%d%c",&option,&c) == 0 || c != '\n'){
            while((check = getchar()) != 0 && check != '\n');
            printf("\tI sayed a Number please\n\n");
        }else if(option < min || option > max){
            printf("\tThe number has to be beetwen %d and %d\n\n",min,max);
        }else{
            break;
        }
    }while(1);

    return option;
}

int main(void){
    int number = checkInput(0,1);

    printf("\nYour number is\t%d\n",number);

    return 0;
}
Please type a number beetwen 0 and 1: 2e
    I sayed a Number please
Please type a number beetwen 0 and 1:   g45
    I sayed a Number please

Please type a number beetwen 0 and 1:   75
    The number has to be beetwen 0 and 1

Please type a number beetwen 0 and 1:   1

Your number is  1

But if you insist to use yes/no instead of Y/N, then;

#include<stdio.h>
#include<strings.h>

int main(void){
    int     validate;
    char    menu_choice[5];
    char *yes = "yes";
    char *no = "no";

        validate = 0;
        do{
            printf("Would you like another go?(yes/no):\t" );

            if(scanf(" %s", menu_choice ) == 1){
                if((strcasecmp(menu_choice, yes) == 0)){
                    printf("You choosed Yes\n\n\n");
                    validate = 1;
                }else if((strcasecmp(menu_choice, no) == 0)){
                    printf("You choosed No\n\n\n");
                    validate = 2;
                }else{
                    printf("Wrong Input.\n\n\n");
                    validate = 0;
                }
            }
        }while( validate == 0 || validate == 1);

        printf("Goodbye\n");

    return 0;
}

Output:

Would you like another go?(yes/no):   sadasdas
Wrong Input.
Would you like another go?(yes/no): 213212
Wrong Input.


Would you like another go?(yes/no): Yes
You choosed Yes


Would you like another go?(yes/no): YeS
You choosed Yes


Would you like another go?(yes/no): YES
You choosed Yes


Would you like another go?(yes/no): No
You choosed No


Goodbye

Please make notice that strcasecmp is found in strings.h and not in string.h.



回答2:

Thank you all for your input your feedback is truly invaluable! I will likely refer back to this one day if i may need it

If any of you are interested here's my final product, even though I may continue to fiddle with it:

 #include <stdio.h>

int main (void) {
  int days;/* user will input number of days light will travel*/
  int validate=0;
  char menu_choice;/* choices... choices*/

  printf(" \n" );
  printf("\t**-**-**-**Welcome to the LIGHT RAY!**-**-**-**\n");/*carny introduction */
  printf(" \n" );
  printf("\tCome one come all \n" );
  printf("\tget an idea of how unbelieveably fast light is!\n");
  do{/*loop for return trip*/
      printf("\tTake a trip on the LIGHT RAY?(y/n):\t" );
      if(scanf(" %c", &menu_choice ) == 1){
          if((menu_choice=='y') || (menu_choice=='Y')){

              printf("\tAhh... Good choice!\n\n");/*responce and input*/
              printf(" \n" );
              printf(" \n");
              printf("\tHow many days would you like to travel?\t");
              scanf("%d", &days);

              printf("processing...\n" ) /* fictional terminal computing information*/;
              sleep(2);
              printf("Initializing warp drive...\n" );
              sleep(1);

              printf("3\n" ) /* count down sequence*/;
              sleep(1);
              printf("2\n" );
              sleep(1);
              printf("1\n" );
              sleep(1);
              printf("SHROOOOM!\n\n" );
              sleep(1);

              long long day_time=days * 86400/*86,400 seconds is equal to 1 day*/;
              long long distance=day_time*186000/*light travels 186,000 miles per second!*/;


              printf("Congratulations, you managed not to get trapped in the space time continuum and manage to travel %lld miles! \n\n",distance);



              validate = 1;
          }else if((menu_choice=='n') || (menu_choice=='N')){
              printf("\n" );
              printf("\tStep aside you're holding up the line!!!\n\n\n");
              validate = 2;
          }else{
              printf("\n" );
              printf("\tWHAT did you just call my mother!.\n\n\n");
              validate = 0;
          }
      }
  }while( validate == 0 || validate == 1);





  getchar();

  return 0;
}

One last thought, would it be possible to change the action statement after the first iteration for example:

Do you wish to embark on a trip through the LIGHT RAY?

. . .

Congratulations...

Do you wish to take another trip? /repeat loop/

I also got some strange interactions when a character like "yes" is imputed for days_travel.

How would i cover for that, I'm thinking of a if then statement, but im not too sure how to structure it?