c언어 파일입력 뒤 배열 저장에 질문있습니다.

조회수 215회

안녕하세요. 요즘 c언어로 프로그래밍을 배우는 학생입니다. 해야되는것중에 하나가 data.txt파일을 열어서 그거를 배열로 저장해서 그 배열들을 이용해서 문제를 푸는 것인데 파일을 열어서 배열로 저장하는 방법을 잘 모르겠네요. 지금 data.txt파일이

-2, 3, 4

1, -3, -4

이런식으로 저장이 되어있습니다. 그걸 열기위해

FILE *fp;
  fp=fopen("data.txt", "r");
    for (ch = getc(fp); ch != EOF; ch = getc(fp)) 
        if (ch == '\n') 
            r = r + 1; 
    c = r + 1;

이렇게 파일을 열고 그 뒤에 총 몇열인지와 몇행인지를 얻은것 같은데 이게 맞는것인지 모르겠네요. 그 뒤에 이제 배열에 저장하려고 하는데 malloc을 쓰면 배열의 하나하나 값을 얻을수 있다고 하는거 같아서 써보려고 하는데 어떻게 하는건가요?

 int **arr = (int **)malloc(r * sizeof(int *));
  for (i = 0; i < r; i++) {
    arr[i] = (int *)malloc(c * sizeof(int));
  }
 for(i = 0; i < r; i++) {
   for(j = 0; j < c; j++) {
     fscanf(fp, "%d", &arr[i][j]);
       printf("%d\n",arr[i][j]); 
   }
 }

을 하면 저장이 될줄 알았는데 안되네요... 도와주세요 ㅠㅠ 최종 목표로는 만약에 printf("%d", mat[0][0]) 했을때 -2가 나오면 될거같아요..ㅠ

1 답변

  • 컬럼수가 3인것을 상정해서 작성했습니다
    만약 컬럼수가 줄마다 다르다면 조금 수정해야겠지요
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #define COL 3
    
    main(){ 
            FILE *fp = fopen("data.txt", "rb")?: puts("fopen error");
            char *buf, *iter = buf;
            int (*mat)[COL] = malloc(BUFSIZ * COL * sizeof(int));
    
            for(int cnt=0; (*iter = fgetc(fp)) != EOF; iter++){
                    if(strchr(",\n", *iter)){
                            mat[cnt / COL][cnt++ % COL]= atoi(buf);
                            buf = iter + 1;
                    }
            }
    
            printf("%d", mat[0][0]);
    
            free(mat);
            fclose(fp);
    }
    
    
    코드실행하기 버튼으로 웹에서 C코드를 실행했을때 오류가 나는 이유는 아무래도
    data.txt 파일을 생성접근하지 못하기 때문이겠지요 로컬 C컴파일러로는 잘 수행할 것입니다
    

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

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.