2017-04-04 121 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