게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
아래 파일에서 이차원 배열 읽기(C에서) 질문했던 사람입니다. ㅎㅎ
게시물ID : programmer_21073짧은주소 복사하기
작성자 : arken
추천 : 1
조회수 : 345회
댓글수 : 8개
등록시간 : 2017/07/21 20:36:45
본삭금 걸어서  본문 수정은 안되는군요;; 
답변 주신분들 다시 한번 감사드리며 다음과 같이 해결했습니다.

----------------------------------------------------------
#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include

//일단 파일의 줄을 세는 함수를 정의했습니다.
int Countlines(FILE *fp)
{
int ch = 0;
int lines = 0;
int currPos = ftell(fp);

fseek(fp, 0, SEEK_SET);

if (fp == NULL)
{
return 0;
}
lines++;
while (feof(fp)==0)
{
ch = fgetc(fp);
if (ch == '\n')
lines++;
}
fseek(fp, currPos, SEEK_SET);
return lines;
}
//위 함수를 이용해 파일을 라인마다 읽어 들이는 함수를 정의했습니다. 이중포인터를 결과값으로 반환합니다.
char **getData(FILE *fp)
{
char **getdata = malloc(sizeof(char *)*Countlines(fp));
int currPos = ftell(fp);

fseek(fp, 0, SEEK_SET);
for (int i = 0; i < Countlines(fp); i++)
{
getdata[i] = malloc(sizeof(char *)*255);
memset(getdata[i], '\0', sizeof(char *)*255);
fgets(getdata[i], sizeof(char *)*255, fp);
}

fseek(fp, currPos, SEEK_SET);

return getdata;

for (int i = 0; i < Countlines(fp); i++)
{
free(getdata[i]);
}
free(getdata);

}
//길이가 제일 긴 줄의 크기를 구하는 함수인데, 정확히 하려니 생각보다 피곤해서;; 2자리수(문자) + 공백1자리 
//strlen 길이를 쟨후 3으로 나누고, 손실이 생길걸 대비해 그냥 2더했습니다;;ㅎㅎ
int Max_Line(FILE *fp)
{
int size = 0;
int ch = 0;
int lines = 0;
int currPos = ftell(fp);

fseek(fp, 0, SEEK_SET);

if (fp == NULL)
{
return 0;
}
while (feof(fp) == 0)
{
ch = fgetc(fp);
if (ch != '\n')
lines++;
else if (size < lines)
{
size = lines;
lines = 0;
}
}
fseek(fp, currPos, SEEK_SET);
return (size/3 +2);
}

//아래에서 파일 포인터를 정의하고, 위 함수들을 이용해
//문자 이중포인터에 파일을 줄마다 저장하고, 그것을 strtol을 이용해 두번째 정수 이중포인터에 정수로 치환하여 대입해서 출력했습니다. ㅎ
int main()
{
FILE *fp = fopen("Problem18.txt", "r");
char **charmatrix;
int **intmatrix = malloc(sizeof(int *)*Countlines(fp));
char *end;
charmatrix = getData(fp);
printf("%d\n", Max_Line(fp));
for (int i = 0; i < Countlines(fp); i++)
{
intmatrix[i] = malloc(sizeof(int)* Max_Line(fp));
memset(intmatrix[i],'\0',sizeof(int)* Max_Line(fp));
}


for (int i = 0; i < Countlines(fp); i++)
{
printf("%s\n", charmatrix[i]);
}
for (int i = 0; i< Countlines(fp); i++)
{
end = NULL;
intmatrix[i][0] = (int)strtol(charmatrix[i], &end, 10);
for (int j = 1; j < Max_Line(fp); j++)
{
intmatrix[i][j] = (int)strtol(end, &end, 10);
}
}
for (int i = 0; i < Countlines(fp); i++)
{
for (int j = 0; j < Max_Line(fp); j++)
{
printf("%d ", intmatrix[i][j]);
}
printf("\n");
}


for (int i = 0; i < Countlines(fp); i++)
{
free(intmatrix[i]);
}

free(intmatrix);
fclose(fp);
return 0;

}
------------------------------------------------------------------------------------------------------
이제 문제를 풀어야겠습니다 ㅎㅎㅎ 다들 수고하세요ㅎㅎ
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호