20 - fprintf

<학습하기>

fprintf
printf의 파일 버전으로 파일에 형식화된 출력을 한다.
파일로 출력된다는 것을 제외하고는 printf와 완전하게 동일하다.

형식
fprintf(파일포인터, 포맷 문자열, 데이터, 데이터, ...);

fscanf
scanf의 파일버전으로 파일로부터 형식화된 입력을 할 수 있다.
파일에서 입력받는다는 것을 제외한고는 scanf와 완전히 동일하다.

형식
fscanf(파일포인터, 포맷문자열, &변수, &변수, ...);

fscanf의 포맷문자열
fscanf의 포맷문자열은 보통 %와 영문자가 결합되어 입력을 해석할 방법을 제시한다.
그러나 포맷문자열에 포맷에 관련되지 않는 문자열이 있을 경우,
fscanf는 해당 문자열이 들어와야 유효한 입력으로 인정하며,
그 문자열이 입력되지 않으면 잘못된 입력으로 판단하게 된다.

보기)
fscanf("나이는 %d살 입니다.", &age);
이 경우, 입력해서 [나이는 20살 입니다.]라고 들어와야 제대로 해석되어 age에 20이 들어간다.

<실습하기>
#include <stdio.h>

//#1
//키보드로 학생들의 이름과 시험 성적을 읽어
//그 결과를 다음과 같은 형식으로 Dragon.exam이라는 파일로 출력하라.

//학생수 : 2
//이름 : 홍길동  C언어 : 78  JAVA : 68  파이썬 : 54
//이름 : 일지매  C언어 : 85  JAVA : 65  파이썬 : 56

void MakeDragonExam();

//#2
//Dragon.exam으로부터 학생들 성적을 읽어 화면에 출력하라.

void ReadDragonExam();

main()
{
MakeDragonExam();

ReadDragonExam();
}

void MakeDragonExam()
{
int count; //학생들 수
char name [20];
int clang;
int java;
int python;
int index;
FILE *fp = fopen ("Dragon.exam", "w");

if (fp == NULL)
{
puts ("파일 열기 실패");
return;
}


printf("학생 수를 입력해 주세요.");
scanf("%d", &count);

//콘솔 출력
//printf("학생수 : %d\n", count);

//파일 출력
fprintf(fp, "학생수 : %d\n", count); //fp - Dragon.exam 파일로 출력.

for(index = 0; index < count; ++index)
{
printf("학생들의 이름과 c언어, 자바, 파이썬 성적 입력해 주세요.");
scanf("%s %d %d %d", name, &clang, &java, &python);
fprintf(fp, "이름 : %s c언어 : %d 자바 : %d 파이썬 : %d\n", name, clang, java, python);
}

fclose(fp);

}

void ReadDragonExam()
{
int count; //for 학생수 읽기
int index; //for 출력

//파일 열기.
FILE *fp = fopen("Dragon.exam", "r");
if(fp == NULL)
{
puts("파일 읽기 실패");
return;
}

//학생수 읽기
fscanf(fp, "학생수 : %d\n", &count);
//만약 줄바꿈 문자가 없다면,
//이후 fscanf에서 [이름:]대신 줄바꿈문자부터 들어오기에
//입력 실패가 나오게 된다.

for(index = 0; index < count; ++index)
{
char name [20];
int clang;
int java;
int python;

fscanf(fp, "이름 : %s c언어 : %d 자바 : %d 파이썬 : %d\n", name, &clang, &java, &python);
//공백은 갯수가 상관이 없다. 썼다면 하나 이상만 있으면 됨.

printf("%s, c언어(%d) 자바(%d) 파이썬(%d)\n", name, clang, java, python);

}

}


댓글

이 블로그의 인기 게시물

11 - Scanf

JAVA - Day3 - Scanner, if, if else

JAVA - Day5 - Array,Random