Minwoo Dev.

<윤성우의 열혈 C프로그래밍> :: 24. 파일 입출력 문제풀이 본문

C++

<윤성우의 열혈 C프로그래밍> :: 24. 파일 입출력 문제풀이

itisminu 2023. 9. 11. 15:55
728x90
반응형
SMALL

문제 24-1 [문자열 방식의 데이터 입출력]

 

 

문제 1

프로그램상에서 mystrory.txt라는 이름의 파일을 생성해서 본인의 이름, 주민번호, 전화번호를 저장하는 프로그램을 작성하자. 단 저장의 형태는 다음과 같아야 한다.(# 문자도 함께 저장되어야 한다.)

#이름 : 이민우
#주민번호 : 010101-3214556
#전화번호 : 010-5662-1234

그리고 저장이 완료되면 메모장으로 확인이 가능해야한다.

 

정답

#include<stdio.h>

int main(void)
{
    FILE * fp = fopen("mystory.txt","wt");
    fputs("#이름 : 이민우\n",fp);
    fputs("#주민번호 : 010101-3214556\n",fp);
    fputs("#전화번호 : 010-5662-1234\n",fp);
    fclose(fp);
    
    return 0;
}

 

문제 2

문제 1에서 작성한 파일에 데이터를 추가하자. 추가할 데이터는 즐겨먹는 음식의 정보와 취미이다. 입력의 형태는 다음과 같아야 한다.

#즐겨먹는 음식 : 밥, 라면, 떡볶이, 마라탕, 아이스크림, 커피
#취미 : 햇살쬐기

정답

#include<stdio.h>

int main(void)
{
    FILE * fp = fopen("mystory.txt","at");
    fputs("#즐겨먹는 음식 : 밥, 라면, 떡볶이, 마라탕, 아이스크림, 커피\n",fp);
    fputs("#취미 : 햇살쬐기\n",fp);
    fclose(fp);

    return 0;
}

 

문제 3

문제 1과 2에서 생성한 파일에 저장된 정보 전체를 출력하는 프로그램을 작성하자.

 

정답

#include<stdio.h>

int main(void)
{
    char str[100];
    FILE * fp = fopen("mystroy.txt","rt");

    while(fgets(str,sizeof(str),fp)!=NULL)
        printf(str);
    fclose(fp);
    
    return 0;
}

 

문제 24-2 [파일의 크기를 바이트 단위로 계산하기]

FILE 구조체의 포인터가 인자로 전달되면, 파일의 크기를 바이트 단위로 계산하여 반환하는 함수를 정의하자. 단! 바로 위에서 소개한 ftell 함수를 이용해서 구현하여야 하며, 함수가 호출된 이후에도 파일 위치 지시자의 정보가 변경되어서는 안된다(파일의 크기를 계산하는 과정에서 변경시켰다면, 파일의 크기를 계산한 이후에는 되돌려 놓아야 한다.)

 

정답

#include<stdio.h>
#include<string.h>
long GetFileSize(FILE * fp);

int main(void)
{
    char str[100];
    FILE * fp = fopen("ABC.txt","rt");
    fgets(str,100,fp);
    fputs(str,stdout);
    printf("파일의 크기 : %ld\n",GetFileSize(fp));
    fgets(str,100,fp);
    fputs(str,stdout);
    printf("파일의 크기 : %ld\n",GetFileSize(fp));
    fgets(str,100,fp);
    fputs(str,stdout);
    fclose(fp);

    return 0;
}

long GetFileSize(FILE * fp)
{
    long fpos;
    long fsize;
    fpos = ftell(fp);

    fseek(fp,0,SEEK_END);
    fsize = ftell(fp);
    fseek(fp,fpos,SEEK_SET);
    return fsize;
}

컴파일러 상의 오류로 실행 결과는 첨부하지 않겠다

728x90
반응형
LIST