This is a program to read in a file of 2D arrays. I have gotten the code to work (option 1) but whenever I change the input file to 3 by 3, it stops working. Any idea why? Tks
The 2 by 2 array file matrix2-2.txtCode:#include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #define MAX_STR_LENGTH 255 typedef struct { int rows; int cols; int** element; } matrix; void displayMenu(void); void addMatrix(char *filename, matrix *matrices, matrix *resMatrix); int readMatrix(char *filename, matrix *matrices, int num); void freeMalloc(matrix *matrices, int num); int main(void){ int choice, n; char inputBuffer[MAX_STR_LENGTH], filename[MAX_STR_LENGTH]; matrix matrices[2]; matrix resMatrix[1]; do{ displayMenu(); do{ gets(inputBuffer); n = sscanf(inputBuffer, "%d", &choice); }while (n != 1); puts(""); switch(choice){ case 1: puts("System >> Enter matrices for addition operation:"); printf("User >> "); fflush(stdin); gets(inputBuffer); sscanf(inputBuffer, "%s", filename); addMatrix(filename, matrices, resMatrix); break; case 2: break; case 3: break; case 4: break; case 5: break; default: puts("Please enter a choice from 1 to 5."); } }while(choice != 5); puts("Exiting Program ... ..."); freeMalloc(matrices, 2); return 0; } void displayMenu(void){ puts(""); puts("Welcome to simple matrix program."); puts("Please select an option."); puts(""); puts("(1) Add two matrices"); puts("(2) Subtract two matrices"); puts("(3) Multiplication of two matrices"); puts("(4) Assign a matrix to another"); puts("(5) Exit"); puts(""); printf("Your choice: "); } int readMatrix(char *filename, matrix *matrices, int num){ int read, orders = 1; int i, j, rows, cols; char inputBuffer[MAX_STR_LENGTH]; FILE *fp; if ((fp = fopen(filename, "r")) != NULL){ for (read = 0; read < num; read++) { do { fgets(inputBuffer, MAX_STR_LENGTH, fp); } while(strstr(inputBuffer, "<matrix>") == NULL); fgets(inputBuffer, MAX_STR_LENGTH, fp); matrices[read].rows = rows = atoi(strchr(inputBuffer, '=') + 2); fgets(inputBuffer, MAX_STR_LENGTH, fp); matrices[read].cols = cols = atoi(strchr(inputBuffer, '=') + 2); matrices[read].element = (int**) malloc(sizeof(int) * rows); printf("System >> Displaying matrix %d\n", orders); orders++; for (i = 0; i < rows; i++) { matrices[read].element[i] = (int*) malloc(sizeof(int) * cols); for (j = 0; j < cols; j++) { fscanf(fp, "%d", &matrices[read].element[i][j]); printf("%d ", matrices[read].element[i][j]); } printf("\n"); } do { fgets(inputBuffer, MAX_STR_LENGTH, fp); } while (strstr(inputBuffer, "</matrix>") == NULL); } } else { printf("%s do not exist!", filename); puts(""); return orders; } fclose(fp); return orders; } void freeMalloc(matrix *matrices, int num) { int current, i; for (current = 0; current < num; current++) { for (i = 0; i < matrices[current].rows; i++) free(matrices[current].element[i]); free(matrices[current].element); } } void addMatrix(char *filename, matrix *matrices, matrix *resMatrix){ int i, j, rows, cols; if (readMatrix(filename, matrices, 2) != 1){ resMatrix[0].rows = rows = matrices[0].rows; resMatrix[0].rows = cols = matrices[0].cols; puts("System >> Displaying resultant matrix after addition"); resMatrix[0].element = (int**) malloc(sizeof(int) * (rows+1)); for(i = 0; i < rows; i++){ if (i != 0) printf("\n"); for(j = 0; j < cols; j++){ resMatrix[0].element[i][j] = (matrices[0].element[i][j] + matrices[1].element[i][j]); printf("%d ", resMatrix[0].element[i][j]); } }} }
The 3 by 3 array file matrix3-3.txtCode:<matrix> rows = 2 cols = 2 1 2 1 2 </matrix> <matrix> rows = 2 cols = 2 2 3 2 3 </matrix>
Code:<matrix> rows = 3 cols = 3 1 2 3 1 2 3 1 2 3 </matrix> <matrix> rows = 3 cols = 3 2 3 4 2 3 4 2 3 4 </matrix>



LinkBack URL
About LinkBacks


