1

1つのタスクで問題が発生しています。

テキストファイルから2つの行列を読み取り、それらを乗算する必要があります。

問題は、1つの行列の読み取り方法は知っているが、ファイル内で2つのスペースで区切られた(たとえば)2つの行列の読み取り方法がわからないことです。

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;
}

どうしたの ?

助けてくれてありがとう。

4

2 に答える 2

1

最初の行列を読みながら 2 番目の行列をスキップする必要があり、その逆もあります。これを試して:

#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;
}
于 2013-02-18T23:26:42.710 に答える
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;
}
于 2013-02-18T23:51:08.150 に答える