2012-12-01 32 views
11

Chương trình: Vì vậy, tôi đã thực hiện một chương trình có hai số, N và L. N là kích thước của một mảng 2D và L là một số từ 3 - 16. Chương trình xây dựng mảng và bắt đầu tại trung tâm và làm việc theo cách của nó ra trong một xoắn ốc ngược chiều kim đồng hồ.Tôi là giá trị của trung tâm và của nó khi bạn đi qua mảng (trong xoắn ốc) giá trị sẽ tăng một. Nó là số nguyên tố, con số đó sẽ là giao cho vị trí đó và nếu không muốn nói nó * sẽ mất vị trí của nó thay vìNgoại lệ dấu chấm động (core dump

lỗi:. tôi nhận được một "Floating điểm ngoại lệ" lỗi, làm thế nào tôi sẽ giải quyết này

Mã:

void Array_Loop(int *Array, int n, int L) ; 

int Is_Prime(int Number) ; 

int main(int argc, char *argv[]){ 

    int **Array ; 
    int n, L ; 

    n = atoi(argv[1]) ; 
    L = atoi(argv[2]) ; 

    Matrix_Build(&Array, n, n) ; 
    Array_Loop(Array, n, L) ; 


    return 0 ; 

} 

void Array_Loop(int *Array, int n, int L){ 

    int i, j, k, h ; 
    int lctn, move; 

    lctn = n/2 + 1 ; 
    i = lctn ; 
    j = lctn ; 
    move = 1 

    while(i != 0 && j != n){ 

    for(j = lctn ; j < lctn + move ; j++){ 

     if(L % 2 == 2) Array[i][j] = -1 ; 
     else Array[i][j] = Is_Prime(L) ; 
     L++ ; 
    } 

    move = move * -1 ; 

    for(i = i ; i > lctn - move ; i--){ 

     if(L % 2 == 2) Array[i][j] = -1 ; 
     else Array[i][j] = Is_Prime(L) ; 
     L++ ; 
    } 

    move-- ; 

    for(j = j ; j > lctn - move ; j--){ 

     if(L % 2 == 2) Array[i][j] = -1 ; 
     else Array[i][j] = Is_Prime(L) ; 
     L++ ; 
    } 

    move = move * -1 ; 

    for(i = i ; i < lctn - move ; i--){ 

     if(L % 2 == 2) Array[i][j] = -1 ; 
     else Array[i][j] = Is_Prime(L) ; 
     L++ ; 
    } 

    move++ ; 

    } 

} 


int Is_Prime(int Number){ 

    int i ; 

    for(i = 0 ; i < Number/2 ; i++){ 

    if(Number % i != 0) return -1 ; 

    } 

    return Number ; 

} 
+8

Bạn đang chia/modding bằng 0. – Mysticial

+1

'Số% i' ...' i = 0' trên lần lặp đầu tiên. – Mysticial

+0

Ngoài ra, khi 'di chuyển <0',' lctn - move> lctn'. Xem dấu hiệu của bạn. –

Trả lời

22

Bạn đang nhận được Floating điểm ngoại lệ vì Số% i, khi tôi là 0:

int Is_Prime(int Number){ 

    int i ; 

    for(i = 0 ; i < Number/2 ; i++){ 

    if(Number % i != 0) return -1 ; 

    } 

    return Number ; 

} 

Chỉ cần bắt đầu vòng lặp tại i = 2. Kể từ i = 1 trong số% i nó luôn bằng bằng không, vì Số là một int.

Btw: Bí mật đã chỉ ra đầu tiên trên các nhận xét.

+1

đã lưu ngày của tôi cảm ơn bạn – kapil

+0

Rất vui khi được trợ giúp ... – dreamcrash

6

Ngoại lệ dấu chấm động xảy ra do vô cùng bất ngờ hoặc NaN. Bạn có thể theo dõi việc sử dụng gdb, cho phép bạn xem những gì đang diễn ra trong chương trình C của bạn trong khi nó chạy. Để biết thêm chi tiết: https://www.cs.swarthmore.edu/~newhall/unixhelp/howto_gdb.php

Tóm lại, các lệnh này có thể có ích ...

gcc -g myprog.c

gdb a.out

gdb core a.out

ddd a.out