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

0で除算を除外しましたか?それはまさに問題です。 –

答えて

4

は、あなたの関数のpoint_on_lineにおけるX1およびX2の値を詳しく見ます。 x1とx2はともに5で、x2 - x1は0です。基本的にゼロで割って浮動小数点例外を与えます。

+0

Cは_methods_をサポートしていません。そして誰もいません。 – Olaf

+0

間違った用語には申し訳ありません。私は 'function'を意味しました。 – alDiablo

関連する問題