c 프로그래밍 파일 읽고 배열 질문있습니다.
안녕하세요. 요즘 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", &mat[i][j]);
printf("%d\n",mat[i][j]);
}
}
을 하면 저장이 될줄 알았는데 안되네요... 도와주세요 ㅠㅠ
최종적인 목표로는
printf("%d", mat[0][0])
를 했을때 -2 라는 값이 나왔으면 좋겠습니다 ㅠㅠ
초보자 같은데 우선은 그냥 배열 쓰시고, malloc
초보자 같은데 우선은 그냥 배열 쓰시고, malloc 쓰는 건 좀 더 공부한 후 해보시는 게 좋겠습니다.
kldp에서는 소스코드 입력할 때
https://kldp.org/node/158191
참고하셔요.
세벌 https://sebuls.blogspot.kr/
제가 봐도 일단은 커다란 배열을 미리 선언한 다음에
제가 봐도 일단은 커다란 배열을 미리 선언한 다음에 그 중 일부만 쓰시는 게 나아보이고요.
(몇 행인지 알려면 일단 다 읽어봐야 하고 다시 데이터를 처음부터 읽느라 두 번 읽어야 하니까)
1)
fgets 로 한 줄을 통채로 읽고, strtok 으로 쉼표를 구분자로 해서 토큰을 뽑아낼 수 있습니다.
https://dojang.io/mod/page/view.php?id=376
뽑아낸 문자열을 atoi 로 정수값으로 변환할 수 있고요.
2)
아니면 fscanf로는...
여기에서 행과 열을 세고 배열에 값을 넣는 걸 추가하시면 되겠죠.
좋은 하루 되세요!
댓글 달기