2016-10-30 70 views
0

我給出了1列中24個科學數字的列表作爲txt文件(使用%le格式)。C從科學記數法的文件讀入輸入到二維數組

#include <stdio.h> 
    #include <stdlib.h> 



    void main() 
    { 
     int i; 
     int j; 

    /*matrix*/ 

    double** mat=malloc(24*sizeof(double*)); 
    for(i=0;i<24;++i) 
    mat[i]=malloc(1*sizeof(double)); 


     FILE *file; 
     file=fopen("input.txt", "r"); 


     if ((file = fopen("input.txt", "r")) == NULL) 
     { 
     printf("Error! opening file"); 
     // Program exits if file pointer returns NULL. 
     exit(1);   
     } 

    else 

    for(i = 0; i < 24; i++) 
{ 
    for(j = 0; j < 1; j++) 
    { 

    if (!fscanf(file, "%le", &mat[i][j])) 
     break; 

    printf("%le\n",mat[i][j]); 
    } 


} 
    fclose(file); 
} 

現在我希望把24元的此一維數組爲4×6矩陣A

怎麼做呢?

我試圖做=>

for(m=1;m<=4;m++) 
    { 
    for(n=1;n<=6;n++) 
     { 
      mat[k][1]=A[i][j]; 

      k++; 
     } 

    } 

     printf("%lf \n",A[i][j]); 

但這nothing.I是新的C所以任何幫助將不勝感激謝謝。

的計劃是像閱讀和矩陣我知道寫一個簡單的任務太長..

回答

0
for(m=1;m<=4;m++) 
{ 
    for(n=1;n<=6;n++) 
    { 
    mat[k][1]=A[i][j]; 
    k++; 
    } 
} 

你的循環指數mn,但你使用ij作爲標 - ij永遠不會初始化或在循環更新。

更大的問題是,您正在將A[i][j]的值分配到mat[k][1],而不是其他方式。

但是,這仍然有一個問題 - 記住,在C中,一個N元素數組索引從0到N-1。如果A是4x6的陣列和mat是24x1陣列(稍後更多),則你的循環應被寫入

for (m = 0; m < 4; m++) 
{ 
    for (n = 0; n < 6; n++) 
    { 
    A[m][n] = mat[k++][0]; 
    } 
} 

的第一個元素的索引爲0,第二個是在索引1等

關於mat ...

目前尚不清楚爲什麼你需要動態分配mat如果你知道它要存儲24個值。目前還不清楚爲什麼它需要成爲24x1陣列。只是聲明它作爲double 24元件陣列:

double mat[24]; 
... 
for (i = 0; i < 24; i++) 
{ 
    if (scanf(file, "%le", &mat[i]) != 1) 
    // handle read error 
} 
... 
for (k = 0, i = 0; i < 4; i++) 
    for (j = 0; j < 6; j++) 
    A[i][j] = mat[k++]; 

最後,void main()int main(void)

0

看來你不加我,J指標在你的循環,你應該把printf的第二內側循環。

試試這個

k=0; 
for(i=0;i<4;i++) 
for(j=0;j<6;j++) 
{ 
    A[i][j] = *(mat[k++]); 
    printf("%f\n",A[i][j]); 
} 
0
for(m=1;m<=4;m++) //wrong counters 
{ 
    for(n=1;n<=6;n++) 
    { 
     mat[k][1]=A[i][j]; //does not assign anything 
     k++; 
    } 
} 
printf("%lf \n",A[i][j]); //not in loop 

你應該開始在for循環從0開始計數,因爲數組從0開始索引,並確保你使用了正確的符號,並宣佈k作爲一個int並初始化它,即int k = 0;

你想分配一個值的東西必須在左邊,而分配的東西必須在右邊。

最後,您的打印語句不在循環中。

下面是一個例子:

for(int i = 0; i < 4; i++){ 
    for(int j = 0; j < 6; j++){ 
     A[i][j] = mat[k][0]; 
     k++; 
     printf("%lf \n",A[i][j]); 
    } 
}