m0_53438027 2021-08-08 10:54 采纳率: 100%
浏览 158
已结题

用easyx给猜数游戏做图形界面 输入任何数总是显示低了重新输入

//case1调用user()用户函数 点击用户运行
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include <graphics.h>
int r[3][4]={{30,20,130,60},{170,20,220,60},{260,20,310,60}};//三个按钮的二维数组
int guess,num;
char s[3];//输入字符串变量
int button_judge(int x,int y)//按钮判断函数
{
    if(x>r[0][0] && x<r[0][2] && y>r[0][1] && y<r[0][3])return 1;
    if(x>r[1][0] && x<r[1][2] && y>r[1][1] && y<r[1][3])return 2;
    if(x>r[2][0] && x<r[2][2] && y>r[2][1] && y<r[2][3])return 3;
    return 0;
}
void user()//用户猜数
{
    srand(time(NULL));//时间种子以改变重新开始时guess的值
    guess=rand()%100+1;//产生随机数
    while(num!=guess)
    {
        
![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/957560193826157.png '2.png')
scanf(s,"%d",&num);
        if(num<guess)
        {
            InputBox(s,30,"低了,请再次输入");
            continue;
        }
        else
        {
            if(num>guess)
            {
                InputBox(s,30,"高了,请再次输入");
                continue;
            }
            else
            {
                closegraph();//关闭绘图环境
                exit(0);//正常退出
            }
        }
    }
}
int main()
{
    initgraph(480,360);//初始化窗口
    setbkcolor(WHITE);
    cleardevice();
    MOUSEMSG m;//鼠标指针
    RECT R1={r[0][0],r[0][1],r[0][2],r[0][3]};
    RECT R2={r[1][0],r[1][1],r[1][2],r[1][3]};
    RECT R3={r[2][0],r[2][1],r[2][2],r[2][3]};
    while(1){//最外层循环,起重新开始作用
    LOGFONT f;//字体样式指针
    gettextstyle(&f);                    //获取字体样式
    _tcscpy(f.lfFaceName,_T("宋体"));    //设置字体为宋体
    f.lfQuality = ANTIALIASED_QUALITY;    // 设置输出效果为抗锯齿  
    settextstyle(&f);                     // 设置字体样式
    settextcolor(BLACK);                //BLACK在graphic.h头文件里面被定义为黑色的颜色常量
    drawtext("用户",&R1,DT_CENTER | DT_VCENTER | DT_SINGLELINE);//在矩形区域R1内输入文字,水平居中,垂直居中,单行显示
    drawtext("计算机",&R2,DT_CENTER | DT_VCENTER | DT_SINGLELINE);//在矩形区域R2内输入文字,水平居中,垂直居中,单行显示
    drawtext("退出",&R3,DT_CENTER | DT_VCENTER | DT_SINGLELINE);//在矩形区域R3内输入文字,水平居中,垂直居中,单行显示
    setlinecolor(BLACK);
    rectangle(r[0][0],r[0][1],r[0][2],r[0][3]);
    rectangle(r[1][0],r[1][1],r[1][2],r[1][3]);
    rectangle(r[2][0],r[2][1],r[2][2],r[2][3]);
    while(true)
    {
    MOUSEMSG m = GetMouseMsg();//获取一条鼠标消息

        switch(m.uMsg)
        {
            case WM_MOUSEMOVE:
                setrop2(R2_XORPEN);
                setlinecolor(LIGHTCYAN);//线条颜色为亮青色
                setlinestyle(PS_SOLID, 3);//设置画线样式为实现,10磅
                setfillcolor(WHITE);//填充颜色为白色
                break;
            case WM_LBUTTONDOWN:
                setrop2(R2_NOTXORPEN);//二元光栅——NOT(屏幕颜色 XOR 当前颜色)
    switch(button_judge(m.x,m.y)) //结构体实现A,B,C三个功能
     {
         case 1:
            {
                InputBox(s,30,"请输入一个1-100间的数");
                user();
                FlushMouseMsgBuffer();//单击事件后清空鼠标消息
            };break;
        case 2:
            {
                //int guess;
                //int num;
                 int max=100;
                 int min=0;//二分法首先定义一个最大最小值
               //printf("让我们开始游戏吧!\n");
               //("请你在心里默想一个1~100的数。\n");
                while(1)
                {
                    InputBox(s,30,"请输入一个1-100间的数");
                    scanf(s,"%d",&num);//将输入字符串依次扫描到全局变量里面
                    int c;//定义整形常量C,通过给c赋值,来执行if条件语句,判断高低
                    // printf("我猜对(1)了吗?是高(0)了还是低(2)了:");
                    scanf("%d",&c);
                    if(c>1)
                    {
                        min=guess;//根据情况每次小循环改变min max的值
                         guess=int((min+max)/2);
                        continue;
                    }
                    else if(c<1)
                    {
                        max=guess;
                        guess=int((min+max)/2);
                        continue;
                    }
                }
            };break;
     case 3:
         closegraph();//关闭绘图环境
         exit(0);//正常退出
     default:
         FlushMouseMsgBuffer();//单击事件后清空鼠标消息
         break;
    }
    getchar();
    }
    }
    }
    return 0;
}

img

  • 写回答

1条回答 默认 最新

  • 墨&语 2021-08-08 11:36
    关注

    将user中的语句

    scanf(s,"%d",&num);
    

    替换成

            if(s[2]>='0'&&s[2]<='9')
            {
                num=(s[0]-48)*100+(s[1]-48)*10+(s[2]-48);
            }
            else if(s[1]>='0'&&s[1]<='9')
            {
                num=(s[0]-48)*10+(s[1]-48);
            }
            else if(s[0]>='0'&&s[0]<='9')
            {
                num=(s[0]-48);
            }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 8月16日
  • 已采纳回答 8月8日
  • 创建了问题 8月8日

悬赏问题

  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 用matlab 设计一个不动点迭代法求解非线性方程组的代码
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试