我正在尝试使用Bresenham算法在C语言中画一条线。我正在使用dosbox for Windows7中的turbo C++来实现这种code.While编译。我没有得到任何错误,但是当我运行代码时,程序在获得两个坐标后终止。请帮助。
关于编译的消息如下..

目录路径如下

我的代码..
# include <stdio.h>
# include <conio.h>
# include <graphics.h>
void main()
{
int dx,dy,x,y,p,x1,y1,x2,y2;
int gd,gm;
clrscr();
printf("\n\n\tEnter the co-ordinates of first point : ");
scanf("%d %d",&x1,&y1);
printf("\n\n\tEnter the co-ordinates of second point : ");
scanf("%d %d",&x2,&y2);
dx = (x2 - x1);
dy = (y2 - y1);
p = 2 * (dy) - (dx);
x = x1;
y = y1;
detectgraph(&gd,&gm);
initgraph(&gd,&gm,"e:\\tc\\bgi");
putpixel(x,y,WHITE);
while(x <= x2)
{
if(p < 0)
{
x=x+1;
y=y;
p = p + 2 * (dy);
}
else
{
x=x+1;
y=y+1;
p = p + 2 * (dy - dx);
}
putpixel(x,y,WHITE);
}
getch();
closegraph();
}发布于 2013-09-24 03:01:34
OP应该发布所使用的输入。
发布的示例代码不起作用的是x1 > x2或y1 > y2。这是一组会突然停止例程的输入。要进行修复,dx和dy应基于绝对值,增量x和y步骤需要独立为+1或-1。
输入3,4而不是3 4 (逗号与空格)也会使例程变得混乱。
在while循环中,推荐使用if(p <= 0)。
OP's "...代码程序在获得两个坐标后终止。“不够详细,因为代码当然应该在获得两个坐标后的某个时候终止。但是OP并没有详细说明它在哪里过早地终止。
发布于 2013-09-12 18:21:34
这是启动调试器并一步一步地检查代码,观察任何变量的典型完美时间点。如果调试器不可用,则可以选择将printf调试到控制台。
第一个技巧是检查这些行是否不会生成错误/异常:
detectgraph(&gd,&gm);
initgraph(&gd,&gm,"e:\\tc\\bgi");
putpixel(x,y,WHITE);发布于 2013-09-28 18:18:55
纠正这个问题的一种方法是根据截图中提到的地址更改initgraph函数中的路径。
detectgraph(&gd,&gm);
initgraph(&gd,&gm,"C:\\TURBOC3\\bgi");
putpixel(x,y,WHITE);https://stackoverflow.com/questions/18761457
复制相似问题