C 언어로 프로그램을 작성하면 파일에 내용을 출력하는 동시에 다음 두 가지 작업도 함께 수행할 수 있습니다.
- 파일에 입력된 문자의 개수 확인
- 파일에 입력된 문자들을 역순으로 출력
먼저 파일을 쓰기 모드("w")로 열어 입력된 문자 개수를 저장하는 방법부터 살펴보겠습니다.
파일에 데이터 입력하기
키보드로 입력한 데이터를 파일에 기록할 때는 다음과 같은 로직을 사용합니다.
while ((ch = getchar( ))!=EOF) {//데이터 입력 후 Ctrl+Z를 누르면 종료됩니다
fputc(ch, fp);
}getchar() 함수로 한 글자씩 입력받고, EOF(Windows 환경에서는 Ctrl+Z)를 만날 때까지 fputc() 함수를 통해 파일 포인터 fp에 문자를 하나씩 기록합니다.
입력된 내용 역순으로 출력하기
이미 파일에 입력해 둔 내용을 거꾸로 출력하려면 ftell, rewind, fseek 함수를 활용하면 됩니다.
- ftell(fp): 현재 파일 포인터의 위치를 바이트 단위로 반환합니다.
- rewind(fp): 파일 포인터를 파일의 맨 처음으로 되돌립니다.
- fseek(fp, offset, origin): 파일 포인터를 지정한 기준점(origin)에서 offset만큼 이동시킵니다.
예제
아래는 파일에 내용을 출력하고, 입력된 문자 개수를 확인한 후, 입력된 문자들을 역순으로 출력하는 C 프로그램입니다.
#include<stdio.h>
int main( ){
FILE *fp;
char ch;
int n,i=0;
fp = fopen ("reverse.txt", "w");
printf ("enter text press ctrl+z of the end");
while ((ch = getchar( ))!=EOF){
fputc(ch, fp);
}
n = ftell(fp);
printf ("No. of characters entered = %d\n", n);
rewind (fp);
n = ftell (fp);
printf ("fp value after rewind = %d\n",n);
fclose (fp);
fp = fopen ("reverse.txt", "r");
fseek(fp,0,SEEK_END);
n = ftell(fp);
printf ("reversed content is\n");
while(i<n){
i++;
fseek(fp,-i,SEEK_END);
printf("%c",fgetc(fp));
}
fclose (fp);
return 0;
}
실행 결과
위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.
enter text press ctrl+z of the end
TutorialsPoint
^Z
No. of characters entered = 18
fp value after rewind = 0
reversed content is
tnioPslairotuT
프로그램의 동작 순서를 정리하면 다음과 같습니다. 먼저 쓰기 모드로 파일을 열어 사용자가 입력한 텍스트를 저장하고, ftell()로 입력된 전체 문자 수를 출력합니다. rewind() 호출 후 파일 포인터 값이 0으로 돌아간 것을 확인할 수 있으며, 마지막에는 읽기 모드로 파일을 다시 연 뒤 fseek()와 fgetc()를 이용해 파일 끝에서부터 한 글자씩 읽어 역순으로 화면에 출력합니다.