c언어 파일입력 뒤 배열 저장에 질문있습니다.
조회수 2720회
안녕하세요. 요즘 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컴파일러로는 잘 수행할 것입니다
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력