我用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变量,而是在异常字符输入后自动清除。

*/