本人用C语言写了一个猜拳游戏,运行结果如图:求大神解释如何修改才能使使用第二个主函数时结果正常?
本人用C语言写了一个猜拳游戏,运行结果如图:求大神解释如何修改才能使字符型的do....while判断语句符合要求(第二个主函数).....运用第一个主函数时的运行结果:...
本人用C语言写了一个猜拳游戏,运行结果如图:求大神解释如何修改才能使字符型的do....while判断语句符合要求(第二个主函数).....
运用第一个主函数时的运行结果:
运用第二个主函数时的运行结果:
代码如下:
#include<stdio.h>
#include<time.h>
int User_Choice()
{
int u;
do
{
printf("请出拳(1-石头,2-剪刀,3-布):");
scanf("%d",&u);
switch(u)
{
case 1:printf("你出的是石头!\n");break;
case 2:printf("你出的是剪刀!\n");break;
case 3:printf("你出的是布!\n");break;
default:printf("你的输入有误,请重新输入!\n");continue;
}
}while(u<1||u>3);
return u;
}
int Computer_Choice()
{
int c;
srand(time(0));
c=rand()%3+1;
switch(c)
{
case 1:printf("电脑出的是石头!\n");break;
case 2:printf("电脑出的是剪刀!\n");break;
case 3:printf("电脑出的是布!\n");break;
}
return c;
}
void Compare(int c, int u)
{
if((u==1 && c==2)||(u==2 && c==3)||(u==3 && c==1))
printf("你赢了!\n");
if((c==1 && u==2)||(c==2 && u==3)||(c==3 && u==1))
printf("电脑赢了!\n");
if(u==c)
printf("你和电脑打平了!\n");
}
void main()
{
int c,u;
int flag=1;
do
{
u=User_Choice();
c=Computer_Choice();
Compare(c,u);
printf("还要继续玩吗?(1/0):");
scanf("%d",&flag);
if(flag==0) break;
}while(flag==1);
printf("谢谢使用!欢迎下次再玩!\n");
}
/*
void main()
{
int c,u;
char ans;
do
{
u=User_Choice();
c=Computer_Choice();
Compare(c,u);
printf("还要继续玩吗?(y/n):");
scanf("%c",&ans);
if((ans=='n')||(ans=='N')) break;
}while((ans=='y')||(ans=='Y'));
printf("谢谢使用!欢迎下次再玩!\n");
}
*/ 展开
运用第一个主函数时的运行结果:
运用第二个主函数时的运行结果:
代码如下:
#include<stdio.h>
#include<time.h>
int User_Choice()
{
int u;
do
{
printf("请出拳(1-石头,2-剪刀,3-布):");
scanf("%d",&u);
switch(u)
{
case 1:printf("你出的是石头!\n");break;
case 2:printf("你出的是剪刀!\n");break;
case 3:printf("你出的是布!\n");break;
default:printf("你的输入有误,请重新输入!\n");continue;
}
}while(u<1||u>3);
return u;
}
int Computer_Choice()
{
int c;
srand(time(0));
c=rand()%3+1;
switch(c)
{
case 1:printf("电脑出的是石头!\n");break;
case 2:printf("电脑出的是剪刀!\n");break;
case 3:printf("电脑出的是布!\n");break;
}
return c;
}
void Compare(int c, int u)
{
if((u==1 && c==2)||(u==2 && c==3)||(u==3 && c==1))
printf("你赢了!\n");
if((c==1 && u==2)||(c==2 && u==3)||(c==3 && u==1))
printf("电脑赢了!\n");
if(u==c)
printf("你和电脑打平了!\n");
}
void main()
{
int c,u;
int flag=1;
do
{
u=User_Choice();
c=Computer_Choice();
Compare(c,u);
printf("还要继续玩吗?(1/0):");
scanf("%d",&flag);
if(flag==0) break;
}while(flag==1);
printf("谢谢使用!欢迎下次再玩!\n");
}
/*
void main()
{
int c,u;
char ans;
do
{
u=User_Choice();
c=Computer_Choice();
Compare(c,u);
printf("还要继续玩吗?(y/n):");
scanf("%c",&ans);
if((ans=='n')||(ans=='N')) break;
}while((ans=='y')||(ans=='Y'));
printf("谢谢使用!欢迎下次再玩!\n");
}
*/ 展开
5个回答
推荐于2017-09-16
展开全部
楼主请看我的修改
运行结果:
#include<stdio.h>
#include<time.h>
int User_Choice()
{
int u;
do
{
printf("请出拳(1-石头,2-剪刀,3-布):");
scanf("%d",&u);
switch(u)
{
case 1:printf("你出的是石头!\n");break;
case 2:printf("你出的是剪刀!\n");break;
case 3:printf("你出的是布!\n");break;
default:printf("你的输入有误,请重新输入!\n");continue;
}
}while(u<1||u>3);
return u;
}
int Computer_Choice()
{
int c;
srand(time(0));
c=rand()%3+1;
switch(c)
{
case 1:printf("电脑出的是石头!\n");break;
case 2:printf("电脑出的是剪刀!\n");break;
case 3:printf("电脑出的是布!\n");break;
}
return c;
}
void Compare(int c, int u)
{
if((u==1 && c==2)||(u==2 && c==3)||(u==3 && c==1))
printf("你赢了!\n");
if((c==1 && u==2)||(c==2 && u==3)||(c==3 && u==1))
printf("电脑赢了!\n");
if(u==c)
printf("你和电脑打平了!\n");
}
void main()
{
int c,u;
char ans;
do
{
u=User_Choice();
c=Computer_Choice();
Compare(c,u);
printf("还要继续玩吗?(y/n):");
scanf("%c",&ans); //用来接受回车符
scanf("%c",&ans);
// while(ans=='\n') scanf("%c",&ans); //这里主要用来接受回车键
if((ans=='n')||(ans=='N'))
break;
}while((ans=='y')||(ans=='Y'));
printf("谢谢使用!欢迎下次再玩!\n");
}
/*
void main()
{
int c,u;
int flag=1;
do
{
u=User_Choice();
c=Computer_Choice();
Compare(c,u);
printf("还要继续玩吗?(1/0):");
scanf("%d",&flag);
if(flag==0) break;
}while(flag==1);
printf("谢谢使用!欢迎下次再玩!\n");
}
楼主可以看看这个:
C语言中scanf函数输入回车符的问题
在用c语言编写输入语句的时候常用到scanf函数,初学者在刚用scanf函数输入时,经常会遇到各种各样的输入错误,最重要的是一定要记住scanf函数的输入格式,scanf函数里包含了哪些东西,输入的时候就必须有哪些东西,比如:scanf("%c%c%c"),那么输入的时候就必须连续输入3个字符,中间不能有任何空格逗号或者回车符等分开,而如果是scanf("%c,%c,%c"),那么输入3个字符的时候中间就必须用一个逗号分隔。
scanf函数最常用的两种输入方式%d整数输入方式,以及%c字符输入方式。
用%d方式输入整数时,输入一串数字然后按回车符,输入就完成了。而用%c方式输入字符时,就稍微复杂一点。一般来说用%c输入字符时,当输完以后,都习惯按一下回车,这时回车符就成了一个问题。
【例1】:
scanf("%c",&a); /*此时输入一个字符,并按下回车,那么变量a将会正确接收输入的字符*/
scanf("%c",&b); /*但是变量b将会接收到回车符,其值为10,或者说ASCII码为10*/
【例2】:
scanf("%d",&x); /*此时输入一串数字并回车,变量x将正常接收到输入的整数*/
scanf("%d",&y); /*变量y不会接收到回车符,需要用户继续输入数字,并回车,正常接收到整数*/
【例3】:
scanf("%d",&x); /*此时输入一串数字并回车,变量x将正常接收到输入的整数*/
scanf("%c",&a); /*但是变量a将会接收到回车符,其值为10,或者说ASCII码为10*/
【例4】:
scanf("%d",&x); /*此时输入一串数字并回车,变量x将正常接收到输入的整数*/
scanf("%d",&y); /*若此时输入的是字母而不是数字,比如输入“s”并回车*/
/*那么变量y将不会接收到任何字符或数字,其值保持原样,不发生任何改变*/
scanf("%c",&a); /*此时变量a将接收到上一步输入的字母*/
/*即变量a中存储的字符将是"s",而不是回车符*/
【结论】:
当输入完整数或字符时,后面还需要输入字符时,为了避免输入的字符变成回车符,可以在输入字符前多加一条scanf语句来吃掉前面的回车符。此时用来吃掉回车符的scanf输入可以用%c方式,也可以用%d方式。当用%c方式来吃掉回车符时,回车符被读进了char类型变量中,当用%d方式来吃掉回车符时,回车符并没有被送进int类型变量中,而是在异常的字符输入后,被自动清除了。
*/
展开全部
//看看我改过的这个吧,我这里测试通过了
#include <stdio.h>
#include <stdlib.h>//加上这个头文件
#include <string.h>//加上这个头文件
#include <time.h>
int User_Choice()
{
int u;
do
{
printf("请出拳(1-石头,2-剪刀,3-布):");
scanf("%d",&u);
switch(u)
{
case 1:printf("你出的是石头!\n");break;
case 2:printf("你出的是剪刀!\n");break;
case 3:printf("你出的是布!\n");break;
default:printf("你的输入有误,请重新输入!\n");continue;
}
}while(u<1||u>3);
return u;
}
int Computer_Choice()
{
int c;
srand(time(0));
c=rand()%3+1;
switch(c)
{
case 1:printf("电脑出的是石头!\n");break;
case 2:printf("电脑出的是剪刀!\n");break;
case 3:printf("电脑出的是布!\n");break;
}
return c;
}
void Compare(int c, int u)
{
if((u==1 && c==2)||(u==2 && c==3)||(u==3 && c==1))
printf("你赢了!\n");
if((c==1 && u==2)||(c==2 && u==3)||(c==3 && u==1))
printf("电脑赢了!\n");
if(u==c)
printf("你和电脑打平了!\n");
}
/*
void main()
{
int c,u;
int flag=1;
do
{
u=User_Choice();
c=Computer_Choice();
Compare(c,u);
printf("还要继续玩吗?(1/0):");
scanf("%d",&flag);
if(flag==0) break;
}while(flag==1);
printf("谢谢使用!欢迎下次再玩!\n");
}
*/
int main()
{
int c,u;
char *ans;//这里有改动
do
{
u=User_Choice();
c=Computer_Choice();
Compare(c,u);
printf("还要继续玩吗?(y/n):");
//%c改为%s
scanf("%s",ans);
if(strcmp(ans, "n") == 0 || strcmp(ans, "N") == 0)
break;
}while(strcmp(ans, "y") == 0 || strcmp(ans, "Y") == 0);
printf("谢谢使用!欢迎下次再玩!\n");
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
多些了一行无用的代码。。。。。。。。。。。。
void main()
{
int c,u;
char ans;
do
{
u=User_Choice();
c=Computer_Choice();
Compare(c,u);
printf("还要继续玩吗?(y/n):");
scanf("%c",&ans);
if((ans=='n')||(ans=='N')) break; //把这行注释掉就ok了
}while((ans=='y')||(ans=='Y'));
printf("谢谢使用!欢迎下次再玩!\n");
}
void main()
{
int c,u;
char ans;
do
{
u=User_Choice();
c=Computer_Choice();
Compare(c,u);
printf("还要继续玩吗?(y/n):");
scanf("%c",&ans);
if((ans=='n')||(ans=='N')) break; //把这行注释掉就ok了
}while((ans=='y')||(ans=='Y'));
printf("谢谢使用!欢迎下次再玩!\n");
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你试试strcmp这个函数吧,字符串比较还是用这个的好
追问
我是问你为什么像我这样不行?
追答
字符后面是有一个'/0'的,你要考虑这个。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
strcmp(ans, 'n')
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询