c언어 메모장 데이터 읽기 질문좀 드립니다

이미지 이미지 메모장에 데이터 읽기를 하는중에 잘 모르는 부분이 있어 질문드립니다. 메모장에는 정점의 수의 갯수와 정점의 (x,y,z)좌표, 면의 갯수와 그 면의 꼭지점의 번호?들이 저장되어있습니다. 위 사진에서 10113은 정점의 갯수이고 그아래 실수들은 정점의 좌표입니다. 또 20222부터 시작하는 사진에서 20222는 면의 갯수이고 그 아래 수들은 꼭지점의 번호라고 보면 되시겠습니다.

제가 하려는 것은 OpenGL에서 이 메모장에 저장되어있는 정보들을 불러 읽어들여 제가 작성한 3차원 구 만들기 소스에 적절하게 대입,변형시켜 한 물체같은 것을 만드는 것입니다. 완성된 실행 결과를 보니 사람의 머리와 목 아래 쇄골 정도까지 나타나는 것 같더라구요.

그래서 이 메모장에 있는 정점의 좌표를 읽어들이기 위해 먼저 file 입출력함수를 썼습니다.

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]);
    }

}

위 소스가 정점까지 읽어들인 소스입니다. 면이랑 번호는 아직 못했습니다

이미지

그런데 실행을 시켜보면 문제가 생깁니다. 출력이 주르륵 되다가 데이터를 다 읽어 들이면 콘솔창이 저절로 꺼져버립니다. 데이터가 제대로 읽어들였는지 확인할 겨를도 없이요..

실행을 시키고 데이터를 읽어들이는 도중에 마우스로 콘솔창을 클릭하면 데이터 읽어들이는걸 중단합니다. 물론 데이터를 다 읽어들이지는 못했지만 데이터를 성공적으로 읽어들입은 알 수있습니다.

일반 c코드에서 출력을하면 원래 마지막에 '아무키를 눌러 종료하십시오' 같은 문구가 출력되기 마련인데 이건 그런것도 없이 그냥 데이터를 주르륵 읽다가 저절로 종료해버립니다..데이터를 끝까지 읽어들였는지 제대로 읽어들였는지 확인을하려면 데이터를 다 읽어들이고 콘솔창이 그대로 유지되어야하는데 픽 꺼져버리니 당황스럽네요.

어떤 문제때문인지 잘 모르겠습니다. 별거 아닌 문제지만 도와주시면 감사하겠습니다

  • 메모리 관련 문제로 보입니다. 런타임에 발생하는 오류이니 단순히 코드만 보고 유추하긴 힘들고 디버깅을 해봐야합니다. 이번기회에 디버거 사용방법을 익히시고 어떤 데이터가 들어올 때 문제가 되는지 확인을 해보시기 바랍니다. 정영훈 2018.10.11 23:47
  • 감사합니다 디버깅한번 해보겠습니다. 그럼 스탑포인트는 정점 좌표를 읽어들이는 for문에 찍으면 될까요? codeslave 2018.10.12 00:16
  • 하음,, 출력 for문하고 fscanf 입력 for문하고 브레이킹 포인터 찍어서 프레시저단위로 f10눌러가면서 디버깅 해보는데 i값이 증가함에따라 값이 알맞게 배열에 순서대로 들어가는게 찍히는데 일일이 10133개를 다 눌러볼 수도없고,, 거의 끄트머리 가야 문제가 있는건지..-- codeslave 2018.10.12 00:28
  • 디버거의 기능중 브레이크 포인트를 조건으로 설정할 수 있습니다. 어떤 변수가 몇개 이상이면 멈춰라 등이 가능합니다. 정영훈 2018.10.13 22:41

1답변

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

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.