布雷森厄姆';s线图代码 我试图用BRESENHAM算法在C语言中画一条线。我在Windows 7的DOSBOX中使用Turbo C++来实现这个代码。编译时,我没有任何错误,但是当我运行代码时,程序在获得2个坐标后终止。请帮助…< /P>

布雷森厄姆';s线图代码 我试图用BRESENHAM算法在C语言中画一条线。我在Windows 7的DOSBOX中使用Turbo C++来实现这个代码。编译时,我没有任何错误,但是当我运行代码时,程序在获得2个坐标后终止。请帮助…< /P>,c,vector-graphics,turbo-c++,bresenham,dosbox,C,Vector Graphics,Turbo C++,Bresenham,Dosbox,有关编译的信息如下。。 目录路径如下所示 我的代码 # 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 poi

有关编译的信息如下。。

目录路径如下所示

我的代码

  # 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();
}
#包括
#包括
#包括
void main()
{
整数dx,dy,x,y,p,x1,y1,x2,y2;
int gd,gm;
clrsc();
printf(“\n\n\t输入第一点的坐标:”;
scanf(“%d%d”、&x1和&y1);
printf(“\n\n\t输入第二点的坐标:”;
扫描频率(“%d%d”、&x2和&y2);
dx=(x2-x1);
dy=(y2-y1);
p=2*(dy)-(dx);
x=x1;
y=y1;
检测图(gd和gm);
initgraph(&gd,&gm,“e:\\tc\\bgi”);
像素(x,y,白色);

而(x这是一个典型的完美点,可以启动调试器并一步一步地查看代码,观察任何变量。如果调试器不可用,则控制台的printf调试是备用方案

第一个技巧是检查这些行是否不会生成错误/异常:

  detectgraph(&gd,&gm);
  initgraph(&gd,&gm,"e:\\tc\\bgi");
  putpixel(x,y,WHITE);

OP应发布已使用的输入

发布的示例代码不起作用的是
x1
x2
y1
y2
。这是一组会突然停止例程的输入。若要修复,则
dx
dy
应基于绝对值,并且增量
x
y
步骤需要独立设置
+1
-1

输入
3,4
而不是
3,4
(逗号对空格)也会弄乱例程


在while循环中,建议
if(p纠正问题的方法是根据屏幕截图中提到的地址更改initgraph函数中的路径

detectgraph(&gd,&gm);
initgraph(&gd,&gm,"C:\\TURBOC3\\bgi");
putpixel(x,y,WHITE);

很好的程序。但是,您还没有初始化任何循环以及在while循环中编码的行部分不正确。以下是我的尝试:-

i = 1; // loop initialization
do {
    putpixel(x, y, 15);
    while(p >= 0) {
        y = y + 1;
        p = p - (2 * dx);
    }
    x = x + 1;
    p = p + (2 * dy);
    i = i + 1;
}
while(i <= dx);
i=1;//循环初始化
做{
像素(x,y,15);
而(p>=0){
y=y+1;
p=p-(2*dx);
}
x=x+1;
p=p+(2*dy);
i=i+1;
}

while(除非您在嵌入式系统上工作,
void main()
是错误的,错误的,错误的。
int main(void)
,看在h**k的份上!您能准确地指定错误和行号吗?我在编译或运行时没有收到这样的错误消息。只是当我输入第一坐标值时,程序突然终止…使用
Alt+F5
查看是否生成了错误消息,但您无法看到它使用关闭的控制台窗口。我在问题中添加了屏幕截图。我还需要做你提到的更改吗?我检查了代码它对3、4、7和8倍频有效,但对其他4倍频无效,只是造成一些混乱。