2013-02-18 4 views
1

하나의 작업에 문제가 있습니다.하나의 txt 파일에서 두 개의 행렬 읽기

텍스트 파일에서 두 개의 행렬을 읽고이를 곱해야합니다.

문제는 하나의 행렬을 읽는 방법을 알고 있지만 파일의 두 공백으로 구분 된 두 행렬을 읽는 방법을 이해할 수 없다는 것입니다.

Matrix.txt는 :

1 2 3 1 2 3 
4 5 6 4 5 6 
7 8 9 7 8 9 

어쩌면 사람이 어떻게 그렇게 나를 설명 할 수있다.

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

int main(){ 
FILE *fp; 
int eSk = 0, sSk = 0, 
matrix1[10][10] = {0}, i, j; 
char c; 
fp = fopen("matrix.txt", "r+"); 
while(!feof(fp)) { 
    while(getc(fp) != ' ') { 
     fscanf(fp, "%d", &matrix1[eSk][sSk]); 
     sSk++; 
    } 
    eSk++; 
} 

for(i = 0; i < eSk; i++) { 
     for(j = 0; j < sSk; j++) { 
      printf("%d ", matrix1[eSk][sSk]); 
     } 
     printf("\n"); 
} 

puts(""); 

system("pause"); 
return 0; 
} 

무슨 일이야 :

지금 내가 먼저 매트릭스를 읽으려고 해요?

도움 주셔서 감사합니다.

+0

지금까지 해보신 것은 무엇입니까? 얼마나 많은 코드가 있습니까? 정확히 무슨 문제가 있니? – ApproachingDarknessFish

답변

1

첫 번째 행과 두 번째 행을 읽는 동안 두 번째 행을 건너 뛸 필요가 있습니다. 이것을 시도하십시오 :

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

int main(void) { 
    FILE *file; 
    int matrixA[3][3], matrixB[3][3]; 
    int garbage[3]; 
    int i, j, k; 

    i = j = k = 0; 
    file = fopen("matrix.txt", "rt"); 

    /* Read the first matrix */ 
    for (i = 0; i < 3; i++) { 
    for (j = 0; j < 3; j++) { 
     fscanf(file, "%d", &matrixA[i][j]); 
    } 
    /* Skip the second matrix */ 
    for (k = 0; k < 3; k++) fscanf(file, "%d", &garbage[k]); 
    } 

    /* Reposition the stream */ 
    fseek(file, 0, SEEK_SET); 

    /* Read the second matrix */ 
    for (i = 0; i < 3; i++) { 
    /* Skip the first matrix */ 
    for (k = 0; k < 3; k++) fscanf(file, "%d", &garbage[k]);  
    for (j = 0; j < 3; j++) { 
     fscanf(file, "%d", &matrixB[i][j]); 
    } 
    } 

    /* Multiply them ... */ 

    /* Show first matrix */ 
    for (i = 0; i < 3; i++) { 
    printf("\n"); 
    for (j = 0; j < 3; j++) { 
     printf(" %d ", matrixA[i][j]); 
    } 
    } 
    printf("\n"); 

    /* Show second matrix */ 
    for (i = 0; i < 3; i++) { 
    printf("\n"); 
    for (j = 0; j < 3; j++) { 
     printf(" %d ", matrixB[i][j]); 
    } 
    } 
    return 0; 
} 
0

문자열의 형식이 표준화되어 있으면 한 번에 두 행렬을 읽을 수 있습니다. 위의 예를 보려면 아래에서 수정 된 버전을 찾으십시오.

int main(){ 
FILE *fp; 
int eSk = 0, sSk = 0, i, j; 

int mat1[3][3], mat2[3][3]; 
char line[256]; 

char c; 
fp = fopen("matrix.txt", "r+"); 
if(NULL == fp) { 
    printf("Can't open the file\n"); 
    exit(-1); 
} 

// Read one line 
fgets(line, 256, fp); 
while(!feof(fp)) { 
    // Convert line to array 
    sscanf(line,"%d %d %d %d %d %d", &mat1[eSk][0], &mat1[eSk][1], &mat1[eSk][2], &mat2[eSk][0], &mat2[eSk][1], &mat2[eSk][2]); 
// Increment counter 
eSk++; 
//Read next line 
fgets(line, 256, fp); 
} 

printf("Matrix1\n"); 

for(i = 0; i < eSk; i++) { 
    for(j = 0; j < 3; j++) { 
     printf("%d ", mat1[i][j]); 
    } 
    printf("\n"); 
} 

printf("Matrix2\n"); 

for(i = 0; i < eSk; i++) { 
    for(j = 0; j < 3; j++) { 
     printf("%d ", mat2[i][j]); 
    } 
    printf("\n"); 
} 

puts(""); 

system("pause"); 
return 0; 
} 
관련 문제