이어서...
문자열을 한번에 입출력하는 함수(fgets(), fputs())
1)문자열을 한번에 입력하는함수 fgets();
함수의 원형은 다음과 같다.
char *fgets(char *, int, FILE *) //파일에서 문자열을 읽어 들인다.
이를 이용해서 예제를 보면
FILE *fp; //파일포인터변수
char str[5]; //데이터를 입력 받을 배열
fp=fopen("a.txt", "r") //파일 개방
fgets( str, sizeof(str), fp);
▲ ▲ ▲
입력받을 배열의 배열명 입력 받을 바이트 수 파일포인터
더 자세한 설명은 fputs를 설명하고 예제를 통해서 설명하겠다.
2)문자열을 한번에 출력하는함수 fputs();
함수의 원형은 다음과 같다.
int fputs(char *, FILE *); //파일로 문자열을 출력한다.
이를 이용해서 예제를 보면
FILE *fp; //파일포인터변수
char str[]="orange"; //출력할 데이터가 저장된 배열, 초기화한다.
fp=fopen("b.txt", "w") //파일을 출력용으로 개방
fputs( str, fp);
▲ ▲
출력할 배열의 배열명 파일포인터
예제) 여러 줄의 문장을 한 줄로 출력하는 프로그램

#include<stdio.h>
#include<string.h> //strlen 함수를 사용하기 위한 헤더파일
int main(){
FILE *ifp, *ofp; //파일 포인터변수 선언
char str[80]; //입력 받은 문자열을 저장할 배열
char *res; //fgets 함수의 리턴값을 저장할 변수
ifp=fopen("a.txt", "r"); //입력 파일을 읽기 전용으로 개방
if(ifp==NULL){ //개방 여부 확인
printf("입력 파일 개방 실패. \n");
return 1;
}
ofp=fopen("b.txt", "w"); //출력 파일을 쓰기 전용으로 개방
if(ofp==NULL){ //개방 여부 확인
printf("입력 파일 개방 실패. \n");
return 1;
}
while(1){ //데이터를 입력하고 출력하는 과정을 반복한다.
res=fgets(str, sizeof(str), ifp); //한 줄 입력
if(res==NULL) break; //파일의 끝이면 반복을 종료한다.
str[strlen(str)-1]='\0'; //새줄 문자 제거
fputs(str, ofp); //입력 받은 문자열을 출력한다.
fputs("",ofp); //띄어 쓰기를 위한 공백 출력
}
fclose(ifp); //입력 파일 닫기
fclose(ofp); //출력 파일 닫기
return 0;
}
다양한 자료형에 맞게 입출력하자(fscanf, fprintf)
함수의 원형은 다음과 같다.
int fscanf(FILE *, char *, ....); //파일에서 형식에 따라 데이터 입력
int fprintf(FILE *, char *, ....); //파일로 형식에 따라 데이터 출력
예제를 통해서 살펴보면....

#include <stdio.h>
int main(){
FILE *ifp, *ofp; //파일 포인터변수 선언
char name[20]; //이름을 저장할 배열
int age; //나이를 저장할 변수
double height; //키를 저장할 변수
int res; //fscanf 함수의 리턴값을 저장할 함수
ifp=fopen("a.txt","r"); //입력 파일을 읽기 전용으로 개방
if(ifp==NULL){ //개방 여부 확인
printf("입력 파일 개방 실패\n");
return 1;
}
ofp=fopen("b.txt","w"); //출력 파일을 쓰기 전용으로 개방
if(ofp==NULL){ //개방 여부 확인
printf("출력 파일 개방 실패\n");
return 1;
}
while(1){
res=fscanf(ifp, "%s%d%lf",name, &age, &height); //각 데이터의 형태에 맞게 입력한다.
if(res==EOF){ //데이터의 입력이 끝나면 반복 종료
break;
}
fprintf(ofp, "%.1lf %d %s\n", height, age, name); //출력 형식에 맞게 파일에 출력한다.
}
fclose(ifp); //입력 파일 닫기
fclose(ofp); //출력 파일 닫기
return 0;
}