如何使用是/否提示重复?

时间:2015-09-03 19:27:15

标签: c loops iteration

我意识到我的数据溢出存在问题,但我主要担心的是尝试重新运行程序以便从头开始。我通过这个网站查看过多个例子,但是找不到符合我需求的例子。

我不确定你是否可以看到我的代码的第一部分,但我基本上尝试使用某些人为我的程序做示例,但我无法弄明白。

如果有人能提出任何建议我会非常感激!

我确定如果我坚持下去,我最终会弄明白,但我认为这对本网站来说是一个很好的问题。

这是我的源代码:

#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;

}

2 个答案:

答案 0 :(得分:0)

我认为这应该足以让你有个想法:

#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

对于这样的事情,我更喜欢这样的事情:

#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

但是如果你坚持使用是/否而不是Y / N,那么;

#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;
}

输出:

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

请注意 strings.h 中的 strcasecmp ,而不是 string.h

答案 1 :(得分:0)

感谢大家的意见,您的反馈意见非常宝贵!如果我需要,我可能会回顾这一天

如果你们中的任何一个人对我的最终产品感兴趣,即使我可能会继续使用它:

 #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;
}

最后一想,是否可以在第一次迭代后更改操作语句 例如:

您是否希望通过LIGHT RAY旅行?

。 。

...恭喜

你想再去旅行吗? / 重复循环 /

当像days_travel这样的字符被评为“是”时,我也得到了一些奇怪的互动。

我如何报道,我正在考虑一个if if语句,但我不太确定如何构建它?