2014-03-29 86 views
1

我試圖從文件中讀取矩陣並將其存儲在已分配的二維數組中。從C語言的txt文件中讀取矩陣並將其存儲在已分配的二維數組中

但它只是讀取前3或4個數字,其餘讀取爲垃圾。

這是我的代碼:

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


int main() 
{ 
FILE *inputFile1; 
FILE *inputFile2; 
FILE *outputFile1; 
int i,j,k; 

int rows1,cols1,rows2,cols2; 

char fileName[100]; 
bool fileFound=false; 

bool multiplcation = true; 

int sum=0; 

do 
{ 
    printf("Enter File name of matrix #1 - with extention - : "); 
    scanf("%[^\n]%*c",fileName); 
    inputFile1 = fopen(fileName,"r"); 
    if(!inputFile1) 
    { 
      printf("File Not Found!!\n"); 
      fileFound=true; 
    } 
    else 
     fileFound=false; 

}while(fileFound); 


do 
{ 
    printf("Enter File name of matrix #2 - with extention - : "); 
    scanf("%[^\n]%*c",fileName); 
    inputFile2 = fopen(fileName,"r"); 
    if(!inputFile2) 
    { 
      printf("File Not Found!!\n"); 
      fileFound=true; 
    } 
    else 
     fileFound=false; 

}while(fileFound); 

fscanf(inputFile1,"%i",&rows1); 
fscanf(inputFile1,"%i",&cols1); 
fscanf(inputFile2,"%i",&rows2); 
fscanf(inputFile2,"%i",&cols2); 

printf("\n\nRows1 = %d",rows1); 
printf("\nCols1 = %d",cols1); 
printf("\n\nRows2 = %d",rows2); 
printf("\nCols2 = %d",cols2); 


if(cols1!=rows2) 
    multiplcation=false; 
else 
    multiplcation=true; 

if(multiplcation==false) 
{ 
    printf("Cant multiply those two matrices \n"); 
    fclose(inputFile1); 
    fclose(inputFile2); 
    return 0; 
} 

else 
{ 
    //allocate Matrcies 

    int **mat1 = (int **)malloc(rows1 * sizeof(int*)); 
    for(i = 0; i < rows1; i++) 
     mat1[i] = (int *)malloc(cols1 * sizeof(int)); 

    i=0; 

    int **mat2 = (int **)malloc(rows2 * sizeof(int*)); 
    for(i = 0; i < rows2; i++) 
     mat2[i] = (int *)malloc(cols2 * sizeof(int)); 

    i=0; 

    int **mat3 = (int **)malloc(rows1 * sizeof(int*)); 
    for(i = 0; i < rows1; i++) 
     mat3[i] = (int *)malloc(cols2 * sizeof(int)); 

    i=0; 


    while(!feof(inputFile1)) 
    { 
     for(i=0;i<rows1;i++) 
     { 
      for(j=0;j<cols1;j++) 
       fscanf(inputFile1,"%d%*[^\n]%*c",&mat1[i][j]); 
     } 
    } 

    i=0; 
    j=0; 

    while(!feof(inputFile2)) 
    { 
     for(i=0;i<rows2;i++) 
     { 
      for(j=0;j<cols2;j++) 
       fscanf(inputFile2,"%d%*[^\n]%*c",&mat2[i][j]); 
     } 
    } 

    ///////////////////////// 
    i=0; 
    j=0; 
    printf("\n\n"); 
    //print matrix 1 
    for(i=0;i<rows1;i++) 
    { 
     for(j=0;j<cols1;j++) 
      printf("%d\t",mat1[i][j]); 

     printf("\n"); 
    } 
    //////////////////////////// 
    i=0; 
    k=0; 
    printf("\n\n"); 
    //print matrix 2 
    for(i=0;i<rows2;i++) 
    { 
     for(j=0;j<cols2;j++) 
      printf("%d\t",mat2[i][j]); 

     printf("\n"); 
    } 
    ///////////////////////// 
    i=0; 
    j=0; 
    //multiplication stetments 
    for(i=0;i<rows1;i++) 
    { 
     for(j=0;j<cols2;j++) 
     { 
      sum=0; 
      for(k=0;k<rows2;k++) 
       sum+=mat1[i][k]*mat2[k][j]; 
     } 
     mat3[i][j]=sum; 
    } 

    i=0; 
    j=0; 
    k=0; 

    //print multiplication result 
    printf("\n\nResult = \n\n"); 

    for(i=0;i<rows1;i++) 
    { 
     for(j=0;j<cols2;j++) 
      printf("%d\t",mat3[i][j]); 

     printf("\n"); 
    } 


    fclose(inputFile1); 
    fclose(inputFile2); 
} 

} 

我的第一個文件是這樣的:

4 3 
    1 2 3 
    2 3 1 
    3 1 2 
    1 3 2 

我的第二個文件是這樣的:

3 4 
    1 2 3 1 
    2 1 2 3 
    3 1 3 2 

任何人都可以幫助我嗎?

+0

'rows1'和'rows2'在哪裏啓動? – chrk

+0

你可以發佈完整的代碼或你的閱讀 – Ruturaj

+0

我編輯的代碼 – user3476527

回答

1

只要使用%d或%i爲我解決了這個問題,但是如果這不能解決您的問題,我們將需要您的完整代碼來幫助您。

fscanf(inputFile1, "%d", &mat1[i][j]); 
+0

我編輯代碼 – user3476527

+0

因此,只使用%d不適合你? – Triad

+0

不,但我試過%d%並且工作了! 然後乘法過程失敗! – user3476527

相關問題