이전 글에서 fopen과 fclose로 파일을 열고 닫는 방법을 배웠다면,
이번에는 실제로 파일에 데이터를 쓰기와 읽기를 다루는 함수, fprintf와 fscanf를 소개합니다.
이 함수들은 화면에 출력하는 printf와 scanf와 거의 비슷하지만,
대상이 화면이 아니라 파일이라는 점만 다릅니다.
● fprintf: 파일에 출력하기
FILE *fp = fopen("data.txt", "w");
fprintf(fp, "이름: %s\n나이: %d", "민수", 20);
fclose(fp);
화면에 출력하듯이, fprintf를 사용하면 파일에 형식 있는 문자열을 저장할 수 있습니다.
● fscanf: 파일에서 입력받기
FILE *fp = fopen("data.txt", "r");
char name[20];
int age;
fscanf(fp, "이름: %s\n나이: %d", name, &age);
fclose(fp);
파일에서 형식에 맞춰 데이터를 읽을 수 있습니다.
형식이 잘 맞지 않으면 오류가 날 수 있으니 주의하세요.
● fprintf와 fscanf 사용 시 주의할 점
- 서식 문자열은 정확히 맞춰야 합니다.
- 공백이나 개행 문자까지 고려해야 합니다.
- 파일 열기 모드를 적절히 선택해야 합니다.
fprintf와 fscanf를 잘 활용하면 프로그램과 외부 파일 간의 데이터 교환이 자유로워집니다.
간단한 정보 저장부터 텍스트 기반 데이터 처리까지 폭넓게 사용할 수 있습니다.
● 실습 문제
문제 1
이름과 나이를 파일에 저장하는 코드를 fprintf로 작성하세요.
문제 2
저장된 파일에서 이름과 나이를 읽어 출력하는 fscanf 코드를 작성하세요.
문제 3
fscanf에서 데이터를 읽을 때 왜 주소 연산자(&)가 필요한가요?
문제 4
다음 코드에서 오류가 발생할 수 있는 이유는?
fscanf(fp, "%s %d", name, age);
문제 5
fprintf와 fscanf를 사용할 때 서식 문자열이 맞지 않으면 어떤 일이 일어날 수 있나요?
▶ 정답 확인하기
정답 1
FILE *fp = fopen("info.txt", "w");
fprintf(fp, "이름: %s\n나이: %d", "준호", 22);
fclose(fp);
정답 2
FILE *fp = fopen("info.txt", "r");
char name[20];
int age;
fscanf(fp, "이름: %s\n나이: %d", name, &age);
printf("%s %d\n", name, age);
fclose(fp);
정답 3
scanf나 fscanf는 값을 변수에 저장해야 하므로, 주소를 전달해야 합니다.
정답 4
정수형 변수 age에 &가 빠졌기 때문에 프로그램이 비정상적으로 작동할 수 있습니다.
정답 5
파일 내용과 서식이 다르면 값이 제대로 읽히지 않거나, 오류가 발생할 수 있습니다.
'프로그래밍언어 > C언어[초급]' 카테고리의 다른 글
[C언어][초급] Chapter63. 주요 표준 라이브러리 함수 – 꼭 알아야 할 C 기본 함수들 (0) | 2025.04.20 |
---|---|
[C언어][초급] Chapter62. 표준 헤더파일의 종류 – 자주 사용하는 C 표준 라이브러리 (0) | 2025.04.20 |
[C언어][초급] Chapter60. 파일 입출력 – fopen, fclose로 파일 다루기 (0) | 2025.04.19 |
[C언어][초급] Chapter59. 구조체와 포인터 – 포인터로 구조체를 다루는 방법 (0) | 2025.04.19 |
[C언어][초급] Chapter58. 중첩 구조체 – 구조체 안에 또 다른 구조체 담기 (0) | 2025.04.19 |