我用C语言写了一个猜谜游戏,运行结果如下图:求大神解释一下使用第二个main函数时如何修改才能让结果正常?
运行结果:
# include & ltstdio.h & gt
# include & lttime.h & gt
int?用户选择()
{
int?u;
做
{
Printf("请打孔(1-石头,2-剪刀,3-布):");
scanf("%d ",& ampu);
开关(u)
{
案子?1:printf("你没石头了!\ n ");打破;
案子?2:printf("你给了剪刀!\ n ");打破;
案子?3:printf("你没布了!\ n ");打破;
默认:printf("您的输入有误,请重新输入!\ n ");继续;
}
} while(u & lt;1 | | u >;3);
回归?u;
}
int?计算机选择()
{
int?c;
srand(time(0));
c = rand()% 3+1;
开关(c)
{
案子?1:printf("电脑是石头!\ n ");打破;
案子?2:printf("电脑出剪刀!\ n ");打破;
案子?3:printf("电脑出布!\ n ");打破;
}
回归?c;
}
作废?比较(int?c,?int?u)
{
if((u==1?& amp& amp?c==2)||(u==2?& amp& amp?c==3)||(u==3?& amp& amp?c==1))
Printf("你赢了!\ n ");
if((c==1?& amp& amp?u==2)||(c==2?& amp& amp?u==3)||(c==3?& amp& amp?u==1))
Printf("电脑赢了!\ n ");
如果(u==c)
Printf("你和电脑扯平了!\ n ");
}
作废?主()
{
int?c,u;
夏尔?ans
做
{
?u = User _ Choice();
?c =计算机_选择();
?比较(c,u);
?Printf("要继续玩吗?(y/n):);
?scanf("%c ",& ampans);?//用于接受回车。
?scanf("%c ",& ampans);
//?while(ans=='\n ')?scanf("%c ",& ampans);?//这个主要用来接受回车键。
?if((ans=='n')||(ans=='N '))?
打破;
} while((ans = = ' Y ')| |(ans = = ' Y '));
Printf("感谢您的使用!欢迎下次再玩!\ n ");
}
/*
作废?主()
{
int?c,u;
int?flag = 1;
做
{
?u = User _ Choice();
?c =计算机_选择();
?比较(c,u);
?Printf("要继续玩吗?(1/0):");
?scanf("%d ",& amp旗帜);
?if(flag==0)?打破;
} while(flag = = 1);
Printf("感谢您的使用!欢迎下次再玩!\ n ");
}
楼主可以看看这个:
c语言中scanf函数的回车问题
用C语言编写输入语句时,经常使用scanf函数。初学者在刚使用scanf功能输入时,经常会遇到各种输入错误。最重要的是要记住scanf函数的输入格式,以及scanf函数包含了什么,比如:scanf ("%c% c "),所以输入的时候一定要连续输入三个字符。中间不能有空格、逗号或回车,如果是scanf("%c,%c,%c "),那么三个字符必须用逗号隔开。
scanf函数最常用的两种输入法是%d整数输入法和%c字符输入法。
在%d模式下输入整数时,输入一串数字,按回车键,输入完成。不过在%c模式下输入字符的时候稍微复杂一点。一般来说,用%c输入字符的时候,写完了就习惯按回车键,回车就成了问题。
示例1:
scanf("%c ",& ampa);?/*此时输入一个字符并按回车键,那么变量A将正确接收输入的字符*/
scanf("%c ",& ampb);?/*但是变量B会收到一个回车,它的值是10,或者ASCII码是10*/
示例2:
scanf("%d ",& ampx);?/*输入一串数字,此时按回车键,变量X将正常接收输入的整数*/
scanf("%d ",& ampy);?/*变量Y不会收到回车,所以用户需要继续输入数字并按回车键,而整数*/
示例3:
scanf("%d ",& ampx);?/*输入一串数字,此时按回车键,变量X将正常接收输入的整数*/
scanf("%c ",& ampa);?/*但是变量A会收到一个回车,它的值是10,或者ASCII码是10*/
示例4:
scanf("%d ",& ampx);?/*输入一串数字,此时按回车键,变量X将正常接收输入的整数*/
scanf("%d ",& ampy);?/*例如,如果您输入字母而不是数字,请输入“s”并按enter */
/*那么变量Y将不会接收任何字符或数字,它的值将保持不变,没有任何变化*/
scanf("%c ",& ampa);?/*此时,变量A将收到上一步输入的字母*/
/*也就是说,存储在变量A中的字符将是“s”而不是回车*/
结论:
当输入整个整数或字符,后面需要输入字符时,为了防止输入字符变成回车,可以在输入字符前增加一条额外的scanf语句来吃掉前面的回车。此时,用于吃回车的scanf输入可以处于%c模式或%d模式。当%c用于吃回车时,回车被读入char变量。当%d用于吃回车时,回车不发送到int变量,而是在异常字符输入后自动清除。
*/