• 一个笨拙的猜数游戏代码参考


    直接上代码!!!

    #include <stdio.h>
    #include <stdlib.h>
    
    #define TOP 1000
    #define BOTTOM 0
    
    /*
        由Mr.Blue and Mr.Green制作于2016.7.31 21:17
        本程序采用块状分段,使程序更加简单,但可读性降低,望见谅
    */
    
    int main(int argc, char * argv[])
    {
        int toobig, toosmall, temp;
        char input;
        printf("这是一个笨拙的猜数游戏.请在心里记下一个0~1000之间的数,然后按任意键开始.\n");
        getch();
        //--------------------猜测块---------------------------------------------------------
        passing:{
            toobig = TOP;
            toosmall = BOTTOM;
            temp = (TOP - BOTTOM) / 2;
            while(1){
                printf("%d太大,太小或刚好(b,s or r)\n",temp);
                switch( (input = getchar() ) ){
                    case 'b':{
                        toobig = temp; //将toobig置为temp,因为temp太大
                        temp = temp - (temp - toosmall) / 2; //如果太大,则temp向toosmall折半
                        break;
                    }
                    case 's':{
                        toosmall = temp; //将toosmall置为temp,因为temp太小
                        temp = temp + (toobig - temp) / 2; //如果太小,则temp向toobig折半
                        break;
                    }
                    case 'r':
                        goto loop; //如果正确,跳至结果块
                    default :{ //如果输入有误,重新输入
                        printf("请输入正确选项!\n");
                        fflush(stdin); //清空缓冲区防止getchar()误读,后面做法一致
                        continue;
                        }
                }
                if(temp == toobig || temp == toosmall){ //让程序更聪明
                    printf("敢玩我?嘿嘿,被我看出来了!\n");
                    goto restart;
                }
                fflush(stdin);
            }
        }
        //---------------------结果块-----------------------------------------------
        loop:{ 
            printf("我就知道我会猜出来\n");
        }
        //-------------------------重置块----------------------------------------------
        restart:{ 
            fflush(stdin);
            printf("重新开始吗?(y or n)\n");
            input = getchar();
            if(input == 'y'){ //如果要重玩,就重玩
                fflush(stdin);
                goto passing;
            }
            else if(input == 'n') //不想就关了吧
                exit(0);
            else{ //如果用户不小心输入错误,重新询问
                printf("请输入正确的选项!\n");
                goto restart;
            }
        }
        /////////////////////////////////////////////////////////////////////
        return 0;
    }

    运行截图

      我猜89

      

      我猜873

      

      我玩它

      

  • 相关阅读:
    APIO2019游记
    ZJOI2019赛季回顾
    「HNOI 2019」白兔之舞
    LOJ #6539 奇妙数论题
    BZOJ4314 倍数?倍数!
    伯努利数学习笔记&&Luogu P3711 仓鼠的数学题
    BZOJ 5093[Lydsy1711月赛]图的价值 线性做法
    AtCoder Grand Contest 030题解
    Codeforces Round #542 (Div. 1) 题解
    Codeforces Round #541 (Div. 2)题解
  • 原文地址:https://www.cnblogs.com/mrblug/p/5723978.html
Copyright © 2020-2023  润新知