C언어 파일 입출력 데이터 읽기 질문드립니다

조회수 1510회

이미지 이미지 이미지

void main(int argc, char** argv)
{
    double *fv;
    int numOfVertex;

    int i;
    FILE *f;

    f = fopen("head_new.txt", "r"); // 스트림 열기
    fscanf(f, "%d \n", &numOfVertex); // 정점의 수 읽어들이기
    fv = (double*)malloc(sizeof(double)*numOfVertex); // 정점의수 10113만큼 동적할당

    for (i = 0; i<numOfVertex; i++) // 정점의 좌표 읽어들이기
        fscanf(f, "%lf", &fv[i]);

    fclose(f); // 스트림 닫기

    printf("%d \n", numOfVertex); // 정점의 수 출력
    for (i = 0; i < numOfVertex; i+=3) // 정점 출력
    {
        printf("%-20lf", fv[i]);
        printf("%-20lf", fv[i + 1]);
        printf("%-20lf \n", fv[i + 2]);
    }

}

안녕하세요 저번에 비슷한 질문을 드리고 해결했지만 이번에는 소스차원?에서의 질문을 드리고자 또 비슷한 소스를 들고왔습니다..코딩을 잘못해서 나오는 문제로 질문들 드리는거니 양해좀 부탁드리겠습니다.

제가 하려고하는것은 메모장의 데이터를 읽어들어들여 잘 읽어들이는지 확인하는 작업을 하고있습니다. 메모장에는 정점의 수의 갯수와 정점의 (x,y,z)좌표, 면의 갯수와 그 면의 꼭지점의 번호?들이 저장되어있습니다. 메모장에 저장되어있는 데이터를 OpenGL에서 표현하면 사람 형상의 물체가 나오게 됩니다. 그래서 먼저 메모장의 정점들을 읽어들이고 확인하는 작업에 있습니다.

첫 사진에서 10113은 정점의 갯수이고 그 아래 실수들은 정점의 좌표입니다. 또 20222부터 시작하는 다음 사진에서 20222는 면의 갯수이고 그 아래 수들은 꼭지점의 번호라고 보면 되시겠습니다. 마지막 사진은 제가 짠 소스의 실행결과입니다. 이 정점과 면들의 데이터는 모두 한 메모장안에 저장되어있습니다.

메모장에 있는 정점의 좌표를 읽어들이기 위해 먼저 file 입출력함수를 썼습니다. 그런데 마지막 사진에서는 잘나온것 처럼 보이지만 실제로 확인을 해보니 데이터를 어느정도 입력을 받다가 끝나버립니다.너무 한참 못미치게요. 뭐가 잘못되었는지 잘모르겠습니다.

데이터를 딱 알맞게 입력받기 위해서 먼저 numOfVertex 변수에 10113 의 정보를 받고 10113만큼 동적할당을 해줍니다. 그럼 10113개의 배열이 생긴셈이고 그 다음 for문으로 동적할당한 fv변수에 데이터를 하나하나 읽어 들입니다.

그리고 잘 읽어들였는가를 확인을 위해 그아래 출력을 하는데 저렇게 나오네요. 확인을 쉽게하기위해 메모장이랑 똑같이 해주려고 for문의 조건식을 i+=3이렇게 해줬는데 이건 문제가 안되어보이는데 왜 입력을 다 받아 들이지 못하는지 잘 모르겠습니다.

제가 아직 초보자라 솔직히 저부분이 잘못되었는지 아닌지 잘 모르겠으니..부탁드리겠습니다 조금 도와주시면 감사하겠습니다. 면의 갯수와 면의 번호정보도 다 출력을 해야하는데 아직 정점의 정보도 제대로 출력을 못하니 답답할 노릇이네요

  • 어느정도 진행하다 발생하는 동적인 오류이므로 답변자 입장에서는 직접 해보는 수 밖에는 없습니다. head_new.txt 파일을 압축하여 aws 의 s3 나 구글 드라이브 같은 url로 접근 할 수 있는 스토리지에 올려주시고 링크를 알려주세요. 정영훈 2018.10.15 03:58
  • 아..원인을 알았습니다 엄청 어처구니 없는 실수인데..10113은 '정점'의 갯수라고 했잖아요? 그런데 이 정점은 x,y,z 세 좌표로 이루어져 있습니다. 메모장의 저 한줄(세개의 실수)가 한 정점의 좌표가 되겠지요..저게 한개의 정점이 되는건데..저는 실수 하나를 정점으로 보고 동적할당한 fv에 저장하였습니다. 그러니..저장되는 정점의 갯수는 대략 10113의 1/3 정도 되는 갯수 밖에 저장이 안되었던 것같아요. 그러니까 저 데이터를 다 저장하려면 10113*3을해주던가 구조체를 만들어서 x,y,z좌표를 읽어들일수있게 하는편이 나을거같습니다..감사합니다 댓글달아주셔서 codeslave 2018.10.15 09:49
  • 그런데 방금 구조체를 정의하고 올바르게한것같은데도 안되는군요..-- codeslave 2018.10.15 09:54

1 답변

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

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

(ಠ_ಠ)
(ಠ‿ಠ)