본문 바로가기

프로그래밍/C언어

C언어 파일 I/O 이건 알아야지 (풀이)

/*
 * 1_textfile.c
 *
 *  Created on: 2018. 3. 14.
 *      Author: juyeon
 */

#include "stdio.h"
#include "string.h"
#include "stdlib.h"

void test1();
void test2();
void test3();
void test4();
void test5();
void test6();
void test7();
void test8();

int main()
{
 //1.abc.txt 텍스트파일을 열어 abc라는 값을 쓰기
 test1();

 

 //2.abc.txt 텍스트파일을 열어 값을 읽고 출력하기
 test2();

 

 //3. abc.txt라는 파일을 열어 다음 라인에 def라는 값을 쓰기
 test3();
 test2();

 

 //4. abc.txt라는 파일을 열어 초기화 후 Hello, world!라는 값을 쓰기
 test4();
 test2();

 

 //5.a.jpg 파일을 읽어서 버퍼에 복사 후, b.jpg라는 파일로 만들기(단, 파일 복사, 이동 등의 함수 사용하지 않기)
 test5();

 

 //6.b.jpg 파일 사이즈 출력하기
 test6();

 

 //7.abc.txt 파일에 3번째 위치(l)부터 4글자를  abcd로 교체 후, 파일내용 읽어서 출력하기(Heabcdworld!)
 test7();

 

 //8.abc.txt 파일을 읽어, 거꾸로 출력하시오(!dlrowdcbaeH)
 test8();

 

 /*9.report.txt라는 파일에는 다음과 같이 성적이 적혀있다. report_result.txt 파일을 생성하여 번호,평균,총점을 다음과 같이 출력하라.
  * 입력파일
 1!en:30,ko:50,math:70
 2!en:50,ko:80,math:50
 3!en:100,ko:100,math:100
 *
 *출력파일
 1;avg=50,sum=150
 2;avg=60,sum=180
 3;avg=100,sum=300
 */
 test9();


 return 0;
}


void test1()
{
 FILE* fp = NULL;
 fp = fopen("abc.txt", "w");
 fprintf(fp, "abc");
 fclose(fp);
}

 

void test2()
{
 FILE* fp = NULL;
 fp = fopen("abc.txt", "r");
 char buf[1024];

 while(fgets(buf, 1024, fp) != NULL) {
  printf("%s\n", buf);
 }
 fclose(fp);
}

 

void test3()
{
 FILE* fp = NULL;
 fp=fopen("abc.txt", "w+");
 fprintf(fp, "\ndef");
 fclose(fp);
}

 

void test4()
{
 FILE* fp = NULL;
 fp = fopen("abc.txt", "w");
 fprintf(fp, "Hello, world!");
 fclose(fp);
}

 

void test5()
{
 FILE* fpr = NULL, *fpw=NULL;
 fpr = fopen("a.jpg", "rb");
 fpw = fopen("b.jpg", "wb");

 char buf[1024];
 int readLen = 0;
 while((readLen=fread(buf, 1, 1024, fpr)) != 0) {
  fwrite(buf, 1, readLen, fpw);
 }
 fclose(fpr);
 fclose(fpw);
}

 

void test6()
{
 FILE* fp = NULL;
 fp = fopen("b.jpg","rb");
 fseek(fp, 0, SEEK_END);
 int nSize = ftell(fp);
 printf("size:%d\n", nSize);
 fclose(fp);
}

 

void test7()
{
 //3번째 위치(l)부터 4글자를  abcd로 교체 후, 파일내용 출력하기(Heabcdworld!)
 FILE* fp=NULL;
 char* s = "abcd";
 char buf[20] = {0,};

 fp=fopen("abc.txt", "r+");
 fseek(fp, 3, SEEK_SET);
 fwrite(s, strlen(s), 1, fp);

 rewind(fp);
 fread(buf, 20, 1, fp);
 printf("%s\n", buf);
 fclose(fp);
}

 

void test8()
{
 FILE* fp=NULL;
 fp=fopen("abc.txt", "r");
 fseek(fp, 0, SEEK_END);
 int nSize=ftell(fp);

 char* p=(char*)malloc(sizeof(char)*nSize);
 memset(p, 0x00, nSize);

 rewind(fp);
 fread(p, nSize, 1, fp);
 for(int i=nSize-1;i>=0;i--){
  char c=p[i];
  printf("%c", c);
 }
 free(p);
 fclose(fp);
}


/*
1!en:30,ko:50,math:70
 2!en:50,ko:80,math:50
 3!en:100,ko:100,math:100
 1;avg=50,sum=150
 2;avg=60,sum=180
 3;avg=100,sum=300
 */
void test9()
{
 FILE* fp=NULL, *fpw=NULL;
 fp=fopen("report.txt", "r");
 fpw=fopen("report_result.txt", "w");
 int num=0, en=0,ko=0,math=0;

 while(fscanf(fp, "%d!en:%d,ko:%d,math:%d", &num, &en, &ko, &math)>0){
  fprintf(fpw,"%d;avg=%d,sum=%d\r\n", num, (en+ko+math)/3, en+ko+math);
 }
 fclose(fp);
 fclose(fpw);
}

반응형

'프로그래밍 > C언어' 카테고리의 다른 글

C언어 파일 I/O 이건 알아야지 (문제)  (0) 2018.03.21