我目前正试图在矩形代码中发挥作用。可悲的是,我得到一个浮点异常,但我不明白为什么。我首先想到的是因为可能出现零分裂,但我已经排除了这一点。我似乎每次都转换为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)
答案 0 :(得分:4)
仔细观察函数point_on_line中x1和x2的值。 x1和x2都是5,x2 - x1是0.你基本上除以ZERO,这给出了浮点异常。