2013-10-28 56 views
0

我一直在努力做這個功課一段時間。我似乎無法找到它的問題。分段錯誤錯誤;絕對值表

我的問題是,爲什麼我不斷收到分段錯誤的錯誤,每次我執行這個程序。

/* Description: A program that takes an input array argument with type double values and displays a table of those inputs and their absolute values. 
*/ 

... 

int main() /* Main Function */ 
{ 
    /* Variables */ 

    int size=5,n; 
    double value[n]; 
    double table; 

    /* Instructions and Input */ 

    for(n=0;n<size;n++){ 
      printf("\nPlease enter value #%d:\n",n); 
      if(n=size-1){printf("\nPlease enter the last value.\n");} 
      scanf("%lf",&value[n]); 
    } 

    /* Recalling the Function and Output */ 

    printf("\nValue\t|Value|\n"); /* Table Header */ 
    table=abs_table(value[n],size); /*Absolute Value Table */ 

    return 0; 
} 

double abs_table(double value, int size) /* Absolute Value Function */ 
{ 
    int i,j; /* Counter Variables */ 
    double v; 

    for(j=1;j<=size;j++){ /* For the Number of rows */ 
      for(i=0;i<=size;i++){ /* For the number of columns */ 
          v = abs(value); // For the absolute values */ 
          printf("\n%g\t%g\n",value,v); 
        } 
    printf("\n"); /* To make sure the rows display on their own line */ 
    } 

    return; 
} 
+2

'雙值[N];''N'將不會被初始化,從而未定義。在任何情況下,都不應該允許編譯編譯器警告('-Wall' for GCC)。 – Kninnug

+0

錯誤,錯誤無處不在。 – Kunal

+0

解決所問的唯一問題,因爲由於局部變量中的值不確定而導致未定義的行爲。 – WhozCraig

回答

1

有在你的代碼的幾個誤區:

ERROR1:在main()聲明double value[n];我相信你想要的是double value[size];

誤差2:在main()語句if(n=size-1)應改爲if(n==size-1)

誤差3:在main()調用函數table=abs_table(value[n],size);應該table=abs_table(value,size);

Error4:您定義功能double abs_table(double value, int size){...}它應該是double abs_table(double value[], int size){...}

錯誤5:裏面的函數abs_table我其實不知道你要在這裏顯示什麼。一個點是可變i應該運行從0到尺寸-1,另一點是,你應該返回的東西

+0

他沒有在'abs_table'內使用'value'作爲數組,所以接受並傳遞一個(普通)'double'在技術上並不是錯誤的。 – Kninnug

+0

你可能是對的,Kninnug。這完全取決於他。根據'abs_table'函數中的'for'循環,我猜他實際上想要傳遞一個數組給它 –

1

許多錯誤是在你的程序:

  1. 陣列無法與可變長度n進行初始化:double value[n];
  2. 一個附加=中缺少if(n=size-1)
  3. 即使您使用長度爲n(點1)正確初始化陣列,那麼scanf("%lf",&value[n]);將寫入超出value陣列長度的存儲器位置。
  4. abs被編碼爲整數,但沒有雙:v = abs(value);
  5. ...可能還有一些錯誤,但列表已經很長。
+0

我不認爲他想打印'n'的地址,所以不需要&符號。 – Kninnug

+0

的確,我的錯誤。刪除。 –

0

main聲明int n沒有初始化,並隨後double value[n]。因此n有一個未定義的值,因此value是未定義的大小。我想你的意思是宣佈double value[size],你已經初始化了。

此外,abs_table應該返回一個double但你返回void。