2017-04-04 71 views
-1

我目前正试图让我的观点在矩形代码工作。可悲的是我得到一个浮点异常,但我不知道为什么。我首先想到这是因为可能的零分,但我排除了这一点。它似乎也是我每次都投入int,所以甚至不应该有浮点。C - 浮点异常

#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) 
+2

请在你的文章中包含确切的错误信息。 – ForceBru

+0

对不起,编辑帖子 – nn3112337

+2

你是怎么排除被零除的?看来,这正是问题所在。 –

回答

4

看看你的功能point_on_line在X1和X2的值越接近。 x1和x2都是5并且x2 - x1是0.您基本上被ZERO除以给出浮点异常。

+0

C不支持_methods_。没有。 – Olaf

+0

对于错误的术语,我很抱歉。我的意思是“功能”。 – alDiablo