AR삽질러

C로 시작하는 컴퓨터 프로그래밍4판 - 12장 파일처리와 메크로 본문

C

C로 시작하는 컴퓨터 프로그래밍4판 - 12장 파일처리와 메크로

아랑팡팡 2023. 6. 22. 07:33
728x90

혼자해보기 12-1

 [예제 12-3]에서 만든 basic.txt파일을 이진 모드로 연 후 freat() 함수를 사용하여 읽어들인 값을 도스 창에 출력하는 프로그램을 작성하시오.

 예제 12-1

#include<stdio.h>
#define _CRT_SECURE_NO_WARNINGS
#include<stdlib.h>

int main(void) {
	FILE* fp;
	int n = 4000;
	if ((fp = fopen("basic.txt", "wb")) == NULL) {
		printf("파일을 열 수 없습니다.\n");
		exit(1);
	}

	fwrite(&n, sizeof(int), 1, fp);

	fclose(fp);
	return 0;
}

프로그램작성

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <stdlib.h>

int main(void) {
	FILE* fp;
	char ch;

	if ((fp = fopen("basic.txt", "rb")) == NULL) {
		printf("파일을 열 수 없습니다.\n");
		exit(1);
	}

	if (fread(&ch, sizeof(char), 1, fp) != 1) {
		printf("파일을 읽어올 수 없습니다.\n");
		exit(1);
	}

	printf("===파일 읽어온 결과===\n%c\n", ch);

	fclose(fp);
	return 0;
}

 

 

혼자해보기 12-2

 다음과 같이 2명의 정보가 입력된 텍스트 파일을 만들어 프로젝트 폴더에 저장한다. 이 파일에서 2명의 정보를 읽어와 도스창에 출력하는 프로그램을 [예제 12-4]를 참조하여 작성하시오.

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <stdlib.h>

struct students {
	char name[40];
	char address[40];
	int age;
};

typedef struct students student;

int main(void) {

	FILE* fp1;

	student st1 = { "홍길동", "서울", 30 }, st2 = { "김박사", "부산", 33 };

	if ((fp1 = fopen("basic.txt", "w")) == NULL) {
		printf("파일을 열 수 없습니다..\n");
		exit(1);
	}

	fprintf(fp1, "%s %s %d\n", st1.name, st1.address, st1.age);
	fprintf(fp1, "%s %s %d\n", st2.name, st2.address, st2.age);
	fclose(fp1);

	if ((fp1 = fopen("basic.txt", "r")) == NULL) {
		printf("파일을 열 수 없습니다.\n");
		exit(1);
	}

	fscanf(fp1, "%s %s %d\n", st2.name, st2.address, &st2.age);
	printf("이름 : %s, 거주지 : %s, 나이 : %d\n\n", st1.name, st1.address, st1.age);
	fclose(fp1);

	if ((fp1 = fopen("basic.txt", "r")) == NULL) {
		printf("파일을 열 수 없습니다.\n");
		exit(1);
	}

	fscanf(fp1, "%s %s %d\n", st2.name, st2.address, &st2.age);
	printf("이름 : %s, 거주지 : %s, 나이 : %d\n\n", st2.name, st2.address, st2.age);

	fclose(fp1);

	return 0;
}

 

01. 다음 프로그램의 오류를 수정하시오.

1)

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <stdlib.h>

int main(void) {

	FILE* fp;
	int n = 4000;
	if ((fp = fopen(basic.txt, "wb")) == NULL) {
		printf("파일을 열 수 없습니다.\n");
		exit(1);
	}
	fwrite(n, sizeof(n), 1, fp);
	fclose(fp);

	return 0;
}

수정후

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <stdlib.h>

int main(void) {

	FILE* fp;
	int n = 4000;
	if ((fp = fopen("basic.txt", "wb")) == NULL) {
		printf("파일을 열 수 없습니다.\n");
		exit(1);
	}
	fwrite(&n, sizeof(int), 1, fp);
	fclose(fp);

	return 0;
}

 

2)

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <stdlib.h>
#define PI 3.14;
#define AREA(PI * X * X)

int main(void) {

	float R;
	printf("원의 반지름을 입력하세요 : ");
	scanf("%f", &R);
	printf("원의 면적은 %.2f입니다.\n", AREA);

	return 0;
}

수정후

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <stdlib.h>
#define PI 3.14
#define AREA(X) (PI * (X) * (X))

int main(void) {

    float R;
    printf("원의 반지름을 입력하세요 : ");
    scanf("%f", &R);
    printf("원의 면적은 %.2f입니다.\n", AREA(R));

    return 0;
}

 

02. 다음과 같은 정보가 담긴 Bookinfo.txt 라는 텍스트 파일이 있다고 가정해보자. 이 파일에 저장되어 있는 정보를 읽어와 구조체 book을 만들어 저장하는 프로그램을 작성하시오.

 C언어 C출판사 20000

 Java J출판사 25000

 VB V출판사 30000

 Perl P출판사 23000

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <stdlib.h>
#define BOOKS 3
#define TITLE_LENGTH 50
#define PUB_LENGTH 50

typedef struct {
    char title[TITLE_LENGTH];
    char publish[PUB_LENGTH];
    int price;
}book;

int main(void) {

    FILE* file = fopen("Bookinfo.txt", "r");
    if (file == NULL) {
        printf("파일을 열 수 없습니다.\n");
        return 1;
    }

    book books[BOOKS];
    for (int i = 0; i < BOOKS; i++) {
        if (fscanf(file, "%s %s %d", books[i].title, books[i].publish, &books[i].price) != 3) {
            printf("파일에서 정보를 읽어오지 못했습니다.\n");
            fclose(file);
            return 1;
        }
    }

    fclose(file);

    for (int i = 0; i < BOOKS; i++) {
        printf("책 제목 : %s\n", books[i].title);
        printf("책 출판사 : %s\n", books[i].publish);
        printf("책 가격 : %d\n", books[i].price);
        printf("\n");
    }

    return 0;
}

 

08. 3개의 수를 입력받은 뒤 가장 큰수를 알려주는 매크로 함수 MAX를 만들고 프로그램하시오.

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <stdlib.h>
#pragma warning(disable:4996)
#define MAX(a, b, c) ((a) > (b) ? ((a) > (c) ? (a) : (c)) : ((b) > (c) ? (b) : (c)))

int main(void) {

	int a, b, c;

	printf("숫자 세개를 입력 : ");
	scanf("%d %d %d", &a, &b, &c);

	int max = MAX(a, b, c);

	printf("가장 큰 수는 %d입니다.", max);

	return 0;
}

 

09. 실수를 입력받아 절댓값을 구하는 매크로 함수를 만들어 이를 출력하는 프로그램을 작성하시오.

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <stdlib.h>
#pragma warning(disable:4996)
#define VALUE(x) (((x) < 0) ? -(x) : (x))

int main(void) {

	float num;

	printf("실수를 입력하세요 : ");
	scanf("%f", &num);

	float result = VALUE(num);

	printf("입력한 수의 절대값은 %.2f입니다.\n", result);

	return 0;
}

 

10. 실수를 입력받아 정수로 바꾸되, 반올림을 해서 정수로 바꾸는 매크로 함수인 CHINT 함수를 만들고 프로그램하시오.

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <stdlib.h>
#pragma warning(disable:4996)
#define ROUNDS(x) ((int)((x) + 0.5))

int main() {
    float num;

    printf("실수를 입력하세요: ");
    scanf("%f", &num);

    int result = ROUNDS(num);

    printf("반올림된 정수값은 %d입니다.\n", result);

    return 0;
}

 

 

728x90
반응형
LIST