C - 浮点异常

时间:2017-04-04 16:01:43

标签: c floating-point ncurses

我目前正试图在矩形代码中发挥作用。可悲的是,我得到一个浮点异常,但我不明白为什么。我首先想到的是因为可能出现零分裂,但我已经排除了这一点。我似乎每次都转换为int,所以甚至不应该有浮点。

#include <stdio.h>
#include <stdlib.h>
#include <ncurses.h>
#include <time.h>

int point_on_line(int x, int y, int x1, int y1, int x2, int y2) {
    int eq1 = (y2 - y1) / (x2 - x1);
    int eq2 = eq1 * (x - x1);
    int eq3 = y - y1 - eq2;
    return eq3;
}

int point_in_rectangle(int x, int y, int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4) {
    int l1 = point_on_line(x, y, x1, y1, x2, y2);
    int l2 = point_on_line(x, y, x2, y2, x3, y3);
    int l3 = point_on_line(x, y, x3, y3, x4, y4);
    int l4 = point_on_line(x, y, x4, y4, x1, y1);
    if ((l1 <= 0) && (l2 <= 0) && (l3 <= 0) && (l4 <= 0)) {
        return 1;
    }
    return 0;
}
int main() {
initscr();
noecho();
nodelay(stdscr, TRUE);

int x_max, y_max;

getmaxyx(stdscr, y_max, x_max);
srand(time(NULL));

start_color();
init_pair(0, COLOR_WHITE, COLOR_BLACK);
init_pair(1, COLOR_RED, COLOR_BLACK);
init_pair(2, COLOR_GREEN, COLOR_BLACK);
init_pair(3, COLOR_BLUE, COLOR_BLACK);
init_pair(4, COLOR_YELLOW, COLOR_BLACK);
init_pair(5, COLOR_MAGENTA, COLOR_BLACK);
init_pair(6, COLOR_CYAN, COLOR_BLACK);

int colors[x_max][y_max];
for (int x = 0; x < x_max; x++) {
    for (int y = 0; y < y_max; y++) {
        int col = 0;
        if (point_in_rectangle(x, y, 5, 5, 10, 5, 10, 10, 5, 10) == 1) {
            col = 1;
        }
        colors[x][y] = col;
    }
}

char input = '0';
while(1) {
    char ch = getch();
    if (ch != ERR) {
        input = ch;
    }

    for (int x = 0; x < x_max; x++){
        for (int y = 0; y < y_max; y++) {
            int col = colors[x][y];
            attron(COLOR_PAIR(col));
            mvaddch(y, x, rand() % 200);
            attroff(COLOR_PAIR(col));
        }
    }
    refresh();
}

endwin();

return EXIT_SUCCESS;
}

编译并执行程序后,它会显示以下错误消息:

Floating point exception (core dumped)

1 个答案:

答案 0 :(得分:4)

仔细观察函数point_on_line中x1和x2的值。 x1和x2都是5,x2 - x1是0.你基本上除以ZERO,这给出了浮点异常。