我意识到我的数据溢出存在问题,但我主要担心的是尝试重新运行程序以便从头开始。我通过这个网站查看过多个例子,但是找不到符合我需求的例子。
我不确定你是否可以看到我的代码的第一部分,但我基本上尝试使用某些人为我的程序做示例,但我无法弄明白。
如果有人能提出任何建议我会非常感激!
我确定如果我坚持下去,我最终会弄明白,但我认为这对本网站来说是一个很好的问题。
这是我的源代码:
#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;
}
答案 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语句,但我不太确定如何构建它?