2017-04-04 8 views
-1

Ich versuche gerade, meinen Punkt im Rechteckcode zu erreichen. Leider bekomme ich eine Gleitkommaausnahme, aber ich habe keine Ahnung warum. Ich dachte zuerst, es wäre wegen einer möglichen Null-Teilung, aber ich habe das ausgeschlossen. Es scheint auch so zu sein, als ob ich jedes Mal nach int lege, also sollte es nicht einmal einen Gleitpunkt geben.C - Gleitkommaausnahme

#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; 
} 

Nach dem Kompilieren und Ausführen des Programms es wird folgende Fehlermeldung gibt:

Floating point exception (core dumped) 
+2

Bitte geben Sie die genaue Fehlermeldung in Ihrem Post an. – ForceBru

+0

Sorry, bearbeitet den Beitrag – nn3112337

+2

Wie hast du austeilen durch Null ausgeschlossen? Es scheint genau das Problem zu sein. –

Antwort

4

Schauen Sie näher an den Werten von x1 und x2 in Ihrer Funktion point_on_line. x1 und x2 sind beide 5 und x2 - x1 ist 0. Sie teilen grundsätzlich durch NULL, was die Gleitkommaausnahme ergibt.

+0

C unterstützt _methods_ nicht. Und da sind keine. – Olaf

+0

Es tut mir leid für die falsche Terminologie. Ich meinte "Funktion". – alDiablo