Alguien puede ayudarme tengo un error en un if . El problema es que cuando
la funcion llega al if todofunciona bien cuando la variable dy es positiva, pero cuando es negativa y la comparo con cero la funcion se termina y ya no hace lo que deberia de hacer. Aqui esta el codigo de mi programa, les marco donde es:
 
#include<graphics.h>
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
 
#include<math.h>
void lineaPuntoMedio(int,int,int,int,int);
void writepixel(int,int,int);
int main(){
 
  int gdriver = DETECT,gmode,ErrorCode;
  initgraph( &gdriver, &gmode, "C:\\TC\\BGI\\");
  ErrorCode = graphresult();		/* Read result of initialization*/
  if( ErrorCode != grOk ){		/* Error occured during init	*/
    printf(" Graphics System Error: %s\n", grapherrormsg( ErrorCode ) );
    getch();
 
  }
  lineaPuntoMedio(0,0,400,0,1);
  lineaPuntoMedio(0,0,400,400,2);
  lineaPuntoMedio(0,0,0,400,3);
  lineaPuntoMedio(0,0,400,200,4);
  getch();
  closegraph();
}
void writepixel(int x,int y,int color){
  putpixel(x,y,color);
}
void lineaPuntoMedio(int x1,int y1,int x2,int y2,int color){
   x1=x1+250;
   y1=-y1+250;
   x2=x2+250;
   y2=-y2+250;
   int x,y,tmp;
   tmp=x=y=0;
   int d,ie,ine;
   d=ie=ine=0;
   signed int dx=x2-x1;
   signed int dy=(y2-y1)<0?abs(y2-y1):(y2-y1);
  if(dy==0){//aqui ocurre el error
		if(dx==0){
	//no hacemos nada
      }else{
			if(dx<0){
	     		tmp=x1; x1=x2; x2=tmp; //caso 5 volverlo caso 1
	 		}
	 		for(x=x1;x<x2;x++)
				writepixel(x,y1,color);//printf("caso 1");  //caso 1
      }
   }else if(dx==0){
		if(y2<y1){
	 		tmp=y1;y1=y2;y2=tmp;     //caso 7 volverlo caso 3
      }
		for(y=y1;y<y2;y++)
			writepixel(x1,y,color); //printf("caso 3");//caso 3
   }else if(dy==abs(dx)){
   	if(dx>0){
			/*if(dy<0){
		  		printf("caso 8");   //caso 8
			}else{*/
			for(x=x1,y=y1;x<x2;x++,y--) //caso 2
				writepixel(x,y,color);
				//printf("caso 2");
			/*}*/
	  }else{
     		if(dy<0){
		     printf("caso 6");      //caso 6
			}else{
				for(x=x1,y=y1;y<y2;x--,y++) //caso 4
					writepixel(x,y,color);
				printf("caso 4");
         }
     }
	}else if(dx<abs(dy)){
   	if(dx>0){
             d=2*dx-dy;
             ie=2*dy;
             ine=2*(dy-dx);
             x=x1;
             y=y1;
             writepixel(x,y,color);
             while(x<x2){
             	if(d<=0){
                   d+=ie;
               }else{
               	d+=ine;
                  y++;
               }
               x++;
               writepixel(x,y,color);
             }
             //caso 9
      }else{
         	d=2*dx-dy;
             ie=2*dy;
             ine=2*(dy-dx);
             x=x1;
             y=y1;
             writepixel(x,y,color);
             while(x<x2){
             	if(d<=0){
                   d+=ie;
               }else{
               	d+=ine;
                  y++;
               }
               x++;
               writepixel(x,y,color);
             }
 
      }
   }
}
 
 
 
 
Alguien sabra porque sucede??? 
   
 


