c언어 파일입출력 과 동적할당

조회수 3122회

이미지질문 제목 :

txt 파일 입력되어 있는거 출력 프로그램

질문 요약 :

문제는동적할당 입력시 a를 입력 받는걸 이해 했는데

b 를 입력 받고 싶은데 a에넣은 배열로 저장이 됩니다.. 그리고

밑에 문자또한 읽어 오지 못하고 쓰래기값으로 출력이 되네요

코드

///*

//#include

//#include

//

//

//void print_matrix(int row, int col, int **mat)

//{

// int i, j;

// for(i = 0; i < row; i++) // 행을 증가 시킴

// {

// for(j = 0; j < col; j++) // 열을 증가 시킴

// {

// printf("%3d ", mat[i][j]); // 화면에 출력

// }

// printf("\n"); // 화면에 개행문자 출력

// }

//}

//

//int main(void)

//{

//

// file *fp;

// int a_row = 0, a_col = 0,bh =0 ,bw=0;

// int a_matrix, **b_matrix,c_matrix;

// int i,j;

// char num,n1,n2,n3,n4,n5,n6;

//

// fp = fopen("data.txt", "r");

// if(fp==null)

// {

// printf("파일에 열리지 않았습니다.\n");

// return 0;

// }

//

// //while(!feof(fp))

// //{

// fscanf(fp, "%c%d%d",&num, &a_row, &a_col);

// //fscanf(fp, "%c%d%d",&n1, &bh, &bw);

//

// //할당

// a_matrix = (int**) malloc(sizeof(int *) * a_row);

// for(i = 0; i < a_row; i++)

// {

// a_matrix[i] = (int*) malloc(sizeof(int ) * a_col);

// }

// b_matrix = (int**) malloc(sizeof(int *) * a_row);

// for(i = 0; i < a_row; i++)

// {

// b_matrix[i] = (int*) malloc(sizeof(int ) * a_col);

// }

// /c_matrix = (int*) malloc(sizeof(int *) * a_row);

// for(i = 0; i < a_row; i++)

// {

// c_matrix[i] = (int*) malloc(sizeof(int ) * a_col);

// }*/

// // 저장

// for(i = 0; i < a_row; i++)

// {

// for(j = 0; j < a_col; j++)

// {

// fscanf(fp, "%d", &a_matrix[i][j]);

//

// }

// }

// /*

// for(i = 0; i < a_row; i++)

// {

// for(j = 0; j < a_col; j++)

// {

// fscanf(fp, "%d", &b_matrix[i][j]);

// }

// }*/

// /*for(i = 0; i < a_row; i++)

// {

// for(j = 0; j < a_col; j++)

// {

// fscanf(fp, "%d", &c_matrix[i][j]);

// }

// }*/

// //출력

// /*printf("%d\n", a_row);

// printf("%c\n", num);

// printf("=== %c 행렬 ===\n",num);

// print_matrix(a_row, a_col, a_matrix);*/

// //}

// printf("=== %c 행렬 ===\n",num);

// print_matrix(a_row, a_col, a_matrix);

// for(i = 0; i < a_row; i++) free(a_matrix[i]);

// free(a_matrix);

//

// for(i = 0; i < a_col; i++) free(b_matrix[i]);

// free(b_matrix);

//

// return 0;

//}*/

1 답변

  • #include <stdio.h>
    #include <stdlib.h>
    
    void print_matrix(int row, int col, int **mat)
    {
        int i, j;
        for(i = 0; i < row; i++)  //행을 증가 시킴
        {
            for(j = 0; j < col; j++)  //열을 증가 시킴
                printf("%3d ", mat[i][j]);  //화면에 출력
    
            printf("\n");  //화면에 개행문자 출력
        }
    }
    
    int main(void)
    {
        FILE *fp;
        int i, j, index = 0;
        int row[3] = {0};
        int col[3] = {0};
        int **matrix[3];
        char matrix_name[3] = {0};
    
        fp = fopen("data.txt", "r");
    
        if(fp == NULL)
            perror("파일이 열리지 않았습니다.\n");
    
    //할당 및 입력
        while(!feof(fp))
        {
            fscanf(fp, " %c %d %d", &matrix_name[index], &row[index], &col[index]);
    
            matrix[index] = (int**) malloc(sizeof(int *) * row[index]);
            for(i = 0; i < row[index]; i++)
                matrix[index][i] = (int*) malloc(sizeof(int ) * col[index]);
    
            for(i = 0; i < row[index]; i++)
                for(j = 0; j < col[index]; j++)
                    fscanf(fp, "%d", &matrix[index][i][j]);
    
            index++;
        }
    
    //출력
        for(i = 0 ; i < index ; i++)
        {
            printf("=== %c 행렬 ===\n", matrix_name[i]);
            print_matrix(row[i], col[i], matrix[i]);
        }
    
    //해제
        for(i = 0 ; i < index ; i++)
        {
            for(j = 0; j < row[i]; j++)
                free(matrix[i][j]);
            free(matrix[i]);
        }
        return 0;
    }
    
    

    읽어보시고 이해안되시는 내용 따로 물어봐주세요

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)