c - 如何使用是/否提示进行重复?

标签 c loops iteration

我意识到我的数据溢出存在问题,但我主要关心的是尝试在最后重新运行程序以重新开始。我通过这个网站浏览了多个示例,但找不到真正适合我需要的示例。

我不确定您是否可以看到我的代码的第一部分,但我本质上尝试使用某人的 do while 示例作为我的程序,但我就是无法弄清楚。

如果有人能提出任何建议,我将不胜感激!

我确信如果我坚持下去,我最终会弄清楚,但我认为这对于这个网站来说是一个很好的问题。

这是我的源代码:

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

}

最佳答案

我认为这应该足以给你一个想法:

#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

但是如果你坚持使用 yes/no 而不是 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

请注意,strcasecmp 是在 strings.h 中找到的,而不是在 string.h 中找到的。

关于c - 如何使用是/否提示进行重复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32383918/

相关文章:

c++ - 在 Linux 下以编程方式更改屏幕分辨率而无需监视器?

倒序复制文件内容

c - 如何读取CSV格式的txt文件并保存到C中的数组中

python - 创建一个新列拉入值,其中值等于列名

c - 如何将字符串中的元音更改为符号?

java - 检查字符串中是否存在模式

c - 尽管导入了 stdio,但 getline 未在此范围内声明

javascript - Javascript 中的 FOR 循环性能

java - 如何在java中创建一个每次迭代返回不同变量的循环?

java - 使用 Java8 流重写