VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1002|回复: 4

高手帮我看看为什么会越界?

[复制链接]

2

主题

4

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-2-17 14:30:01 | 显示全部楼层 |阅读模式
程序中,黄色点的轨迹所成的直线应该在x=100-400,y=100-300之间显示,为什么左右下三个方向都越界了呢?(三个方向只越出1)哪位大虾帮忙看看。

#include<stdlib.h>
#include <graphics.h>
#include<stdio.h>
main()
{float pf,ps,a,j;
int y,n,x,i;
int GraphDriver=DETECT,GraphMode;
initgraph( &GraphDriver, &GraphMode, "c:\\turboc\\cgi" );
setbkcolor(GREEN);
bar(100,100,400,400);
setfillstyle(SOLID_FILL,RED);
bar(100,300,400,400);
printf("\n\ninput the number of n:\n");
scanf("%d",&n);
printf("input the value of pf(0-1):");
scanf("%f",&pf);
ps=(1-pf)/2;
for(i=0;i<n;i++)
  {j=(float)rand()/32767*300+100;
   x=(int)j;
   y=100;
   while(y<=300)
    {if(x>=400) x=100+x%400;
     if(x<100) x=300+x%100;
     a=(float)rand()/32767;
     if(a<pf) y++;
     else if(a<=pf+ps) x--;
     else if(a<=1) x++;
     putpixel(x,y,YELLOW);
     if(y==300) putpixel(x,y,BLUE);
     if(getpixel(x-1,y)==1) putpixel(x,y,BLUE);
     if(getpixel(x+1,y)==1) putpixel(x,y,BLUE);
     if(getpixel(x,y+1)==1) putpixel(x,y,BLUE);
    }
  }
getch();
closegraph;
}
回复

使用道具 举报

0

主题

6

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-4-20 18:30:01 | 显示全部楼层
需要调试的,建议lz用在tc上跟踪一下,会不会是浮点向整型转化时,向上“偏移”1个象素?
回复

使用道具 举报

2

主题

4

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
 楼主| 发表于 2020-4-21 11:00:01 | 显示全部楼层
但是  while(y<=300)应该限定了Y方向上的坐标;
     if(x>=400) x=100+x%400;
     if(x<100) x=300+x%100;限定了X方向上的坐标,就算整形转换的时候有偏移,也应该先经过上面的边界判定才对啊?
回复

使用道具 举报

0

主题

18

帖子

12.00

积分

新手上路

Rank: 1

积分
12.00
发表于 2020-5-15 10:45:01 | 显示全部楼层
j=(float)rand()/32767*300+100;
   x=(int)j;


J 直接整除就是了吧\
回复

使用道具 举报

2

主题

4

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
 楼主| 发表于 2020-5-24 21:00:02 | 显示全部楼层
我这个代码可以直接复制到文本用TC运行的,N随便输入个几十到几百,pf要0-1之间的小数
总是想不通为什么会越界1。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表