程序崩溃 - 除以零

时间:2017-02-25 19:51:46

标签: c++ pointers scanf

我的代码是这样的:

if (x[b] != x[c] && x[a] != x[b])
{
    if(x[a] != x[b] != x[c] != x[d])
    {
        if(y[a] != y[b] != y[c] != y[d])
        {
            int m = (y[a] - y[b])/(x[a] - x[b]);
            int b = y[a] - x[a] * m;
            if((y[c] - x[c]*m > b && y[d] - x[d]*m > b)|| (y[c] - x[c]*m < b && y[d] - x[d]*m < b)){
                m = (y[b] - y[c])/(x[b] - x[c]);
                b = y[b] - x[b] * m;
                if((y[a] - x[a]*m > b && y[d] - x[d]*m > b)|| (y[a] - x[a]*m < b && y[d] - x[d]*m < b))
                {
                    int xx[4];
                    int yy[4];
                    xx[0] = x[a];
                    xx[1] = x[b];
                    xx[2] = x[c];
                    xx[3] = x[d];
                    yy[0] = y[a];
                    yy[1] = y[b];
                    yy[2] = y[c];
                    yy[3] = y[d];
                    if(c == 1)
                    {
                        c = 0;
                        pt = povrsina(xx, yy);
                            pc = p - pt;
                    }
                    pv = povrsina(xx, yy);
                    pr = p - pv;
                    if(pr < pc)
                    {
                        pc = pr;
                        pt = pv;
                    }
                    else if(pr == pc)
                    {
                        pt = max(pt, pv);
                    }
                }
            }
        }
    }
}

我尝试的输入是:

5
30
0  0
10 0
0  10
10 10
7  3

我的程序在第174行中遇到了Division by zero的错误代码:

m = (y[b] - y[c])/(x[b] - x[c]);

所以我添加了第一个if语句检查

if x[b] != x[c] 

但由于某些原因它仍然因相同的错误代码而在同一行中崩溃。

1 个答案:

答案 0 :(得分:0)

以下情况正常。

int n = 0;
double p  = 0;

scanf("%d\n%lf", &n, &p);

int *x = (int *) malloc(sizeof(int) * n);
int *y = (int *) malloc(sizeof(int) * n);

for(int i = 0; i < n; i++){
    scanf("%d %d", &x[i], &y[i]);
}

for(int i = 0; i < n; i++){
    printf("%d %d\n", x[i], y[i]);
}

请参阅demo

  

更新

由于以下行,您的代码崩溃了。

int m = (y[a] - y[b])/(x[a] - x[b]);

如果a, b, c, d的值是0, 2, 3, 4,那么分母词(x[a] - x[b])代表(x[0] - x[2])等于零,对吧?因为第1和第3个输入是0 00 10

如果将值除以零,则会变为无穷大,此时程序将崩溃。 在使用除法运算编写语句时,请确保除数不为零。