c언어 파일입출력 질문입니다. 좌표를 찍어 둘레 넓이등을 구하는 함수인데 좌표는 프린트가 되는데 둘레 넓이가 안나옵니다

조회수 1325회

//사용자로부터 사각형을 구성하기 위한 좌표 값 2개의 묶음을 파일에서 입력 받고, //각각의 넓이와 둘레를 계산해서 화면에 출력하는 프로그램을 작성할 것

//1. 사용자로부터 사각형 정보가 들어있는 파일의 이름을 입력 받을 것 //2. 파일의 첫 줄에 있는 사각형의 개 수를 처음에 입력 받을 것 //3. 동적 할당 기법을 이용해서 사각형의 개 수 만큼에 해당되는 RECTANGLE 형 배열을 만들 것 //4. 좌표 값 2개(x1, y1, x2, y2)를 파일로부터 읽어서 배열에 넣을 것(2단계에서 //정해진 사각형의 개 수 만큼 파일에서 좌표 값을 읽을 것) //5. 넓이와 둘레를 계산하는 기능을 각각 함수로 구현할 것

// 프로그램을 구현할 때 최대한 함수들을 사용하고, 전역변수를 사용하지 말 것 // 좌표와 사각형을 의미하는 구조체를 앞에서 보인 것처럼 만들어서 사용할 것

include

include

include

typedef struct { int x; int y; } POINT; typedef struct { POINT P1; POINT P2; } RECTANGLE; typedef struct { int width; int height; int area; int permeter; }ALL; FILE* getFileName() { printf("파일의 이름을 입력하세요: "); char list[20]; scanf_s("%s", list, 20); FILE* fp = fopen(list, "rt"); if (fp == NULL) {//파일 없을 경우 파일이 없다고 출력 printf("파일이 없습니다\n"); exit(0); } return fp; } int getRecNum(FILE* fp) {

int recNum = 0;
fscanf(fp, "%d", &recNum);

return recNum;

} RECTANGLE* createRecNum(int recNum) { return (RECTANGLE*)malloc(sizeof(RECTANGLE)recNum); } void createPoint(FILE fp, RECTANGLE* point, int recNum) { for (int i = 0; i < recNum; i++) { fscanf(fp, "%d %d %d %d", &point[i].P1.x, &point[i].P2.x, &point[i].P1.y, &point[i].P2.y); } } ALL* createAll(int recNum) {//자료 저장 공간 할당 return (ALL*)malloc(sizeof(ALL)recNum); } void makeAll(int m, ALL all, RECTANGLE* point) { for (int i = 0; i < m; i++) { all[i].width = abs(point[i].P1.x - point[i].P2.x); all[i].height = abs(point[i].P1.y - point[i].P2.y); all[i].area = abs(all[i].width)*abs(all[i].height); all[i].permeter = 2 * (abs(all[i].width) + abs(all[i].height));

    printf("P1 = [%d %d]\n", point[i].P1.x, point[i].P1.y);
    printf("P2 = [%d %d]\n", point[i].P2.x, point[i].P2.y);
    printf("width : %d\n", all[i].width);
    printf("height : %d\n", all[i].height);
    printf("area : %d\n", all[i].area);
    printf("permeter = %d\n", all[i].permeter);
}

} int main(void) { int recNum = 0; //1. 사용자로부터 사각형 정보가 들어있는 파일의 이름을 입력 받을 것 FILE* fp = getFileName();

//2. 파일의 첫 줄에 있는 사각형의 개 수를 처음에 입력 받을 것
recNum = getRecNum(fp);
printf("%d\n", recNum);


//3. 동적 할당 기법을 이용해서 사각형의 개 수 만큼에 해당되는 RECTANGLE 형 배열을 만들 것
RECTANGLE* point = NULL;
point = createRecNum(recNum);

//4. 좌표 값 2개(x1, y1, x2, y2)를 파일로부터 읽어서 배열에 넣을 것(2단계에서 
//정해진 사각형의 개 수 만큼 파일에서 좌표 값을 읽을 것)
createPoint(fp, point, recNum);

//5. 넓이와 둘레를 계산하는 기능을 각각 함수로 구현할 것
//width,height,area,permeter
ALL* last = NULL;
last = createAll(recNum);
makeAll(recNum, last, point);

free(point);
free(last);

return 0;

}

//텍스트 파일내용은

3

10 10 20 20

20 20 70 70

30 30 50 50

이런식 입니다

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    x, y 좌표 순서가 잘못됐네요. x1, y1, x2, y2 순으로 받아야하는데, x1, x2, y1, y2 순으로 받으셔서 그렇습니다.

    void createPoint(FILE* fp, RECTANGLE* point, int recNum) {
        for (int i = 0; i < recNum; i++) {
            fscanf(fp, "%d %d %d %d", &point[i].P1.x, &point[i].P1.y, &point[i].P2.x, &point[i].P2.y);
        }
    }
    
    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 정말 감사합니다ㅠㅠㅠ 해결했습니다 aassz337 2018.4.2 13:50

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

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

(ಠ_ಠ)
(ಠ‿ಠ)