m0_53438027
2021-08-08 10:54
采纳率: 100%
浏览 92

用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);
            }
    
    评论
    解决 1 无用
    打赏 举报