我意识到我的数据溢出存在问题,但我主要关心的是尝试在最后重新运行程序以重新开始。我通过这个网站浏览了多个示例,但找不到真正适合我需要的示例。
我不确定您是否可以看到我的代码的第一部分,但我本质上尝试使用某人的 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/