黑马程序员技术交流社区

标题: 输入字母就死循环 [打印本页]

作者: 我说三年    时间: 2016-4-25 19:25
标题: 输入字母就死循环
本帖最后由 我说三年 于 2016-4-25 20:58 编辑

这段代码一输入字母就死循环,  我想输入两位数以上或字母都可以结束游戏  应该要怎么优化?

//
//  main.c
//  课堂练习
//
//
//
#include <stdio.h>
#include <stdlib.h>
int a = 0;
int b = 0;
int c = 0;
/**
*  玩家
*
*  @param a 输入猜拳
*/
void me(int *pA);
/**
*  电脑
*
*  @param pB 用来储存电脑随机的变量
*/
void computer(int *pB);
/**
*  用来比较输赢
*
*  @param pA 玩家
*  @param pB 电脑
*  @param pC 比较的结果
*/
void cmp(int *pA,int *pB,int *pC);
int main()
{
    while(1)
    {
        system("clear");
        printf("请输入:\n");
        scanf("%d",&a);
        if(a > 9 || a > 'a')
        {
            printf("Game Vore\n");
            return 0;
        }

        me(&a);
        computer(&b);        cmp(&a,&b,&c);
        
    }
    return 0;
}
void me(int *pA)
{
    while(*pA <= 0 || *pA >= 4)
    {
        printf("你所输入有误/n请重新输入:\n");
        scanf("%d",&*pA);
        if(a > 9 || a > 'a')
        {
            break;
        }
    }
    switch(*pA)
    {
        case 1:
            printf("你出的是:石头\n");
            break;
        case 2:
            printf("你出的是:剪刀\n");
            break;
        case 3:
            printf("你出的是:布\n");
            break;
    }


}

void computer(int *pB)
{
    *pB = arc4random_uniform(3) + 1;
    switch(*pB)
    {
        case 1:
            printf("电脑出的是:石头\n");
            break;
        case 2:
            printf("电脑出的是:剪刀\n");
            break;
        case 3:
            printf("电脑出的是:布\n");
            break;
            
    }

}
void cmp(int *pA,int *pB,int *pC)
{
    *pC = *pA - *pB;
    if(*pC == 0)
        printf("你和电脑不相上下");
    if(*pC == -1 || *pC == 2)
        printf("你太厉害了,你赢了!");
    if(*pC == -2 || *pC == 1)
        printf("太遗憾了,你输了!");
    printf("\n");
}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2