한 글자씩 쓰기

텍스트 파일에 한 글자씩 쓰는 함수는 fputc(c, fp)다. (문자c를 fp에 씀) 

파일 "alphabet.txt"에 a부터 z까지 쓰는 코드는 아래와 같다.

#include <stdio.h>

int main(void)
{
	FILE* fp = NULL;

	fp = fopen("alphabet.txt", "w");
	if (fp == NULL) {
		fprintf(stderr, "파일 alphabet.txt를 열 수 없습니다.\n");
		exit(1);
	}

	char c;
	for (c = 'a'; c <= 'z'; c++)
		fputc(c, fp);

	fclose(fp);
	return 0;
}

결과는 아래와 같다.

예전에 교수님이 과제나 시험 코드 자꾸 cpp파일로 제출하라고 하셨었는데 cpp로 위에 코드 실행하면

식별자"exit"을 찾을 수 없다 고 오류가 뜬다. (왜 그런지 찾아보기)

c로 저장하니까 정상적으로 실행은 된다.

 

한 글자씩 읽기

이번에는 파일 alphabet에서 한 글자씩 읽어보겠다.

fgetc(fp)를 이용한다. (fp에서 하나의 문자를 읽어서 반환)

#include <stdio.h>

int main(void)
{
	FILE* fp = NULL;
	int c;

	fp = fopen("alphabet.txt", "r");
	if (fp == NULL) {
		fprintf(stderr, "파일 alphabet.txt를 열 수 없습니다.\n");
		exit(1);
	}

	while ((c = fgetc(fp)) != EOF)
		putchar(c);

	fclose(fp);
	return 0;
}

EOF는 stdio.h에 정의되어 있고 -1이다. 일반적인 문자의 값은 -1이 아니어서 fp에서 가져온 문자c가 EOF가 아닐 때까지 반복하여 하나의 문자씩 출력이 가능하다.

결과는 이렇다.

 

한 줄씩 읽고 쓰기

텍스트 파일에서 한줄씩 읽고 쓰려면 fputs(), fgets()를 사용한다.

fputs(s, fp) : 문자열 s를 fp에 쓴다.

fgets(fp) : fp에서 한 줄을 읽어서 반환한다.

#include <stdio.h>

int main(void)
{
	FILE* fp = NULL;
	char str[100];

	fp = fopen("file.txt", "r");

	if (fp == NULL) {
		fprintf(stderr, "파일 file.txt를 열 수 없습니다.\n");
		exit(0);
	}

	do {
		gets(str);
		fputs(str, fp);
	} while (strlen(str) != 0);

	fclose(fp);
	return 0;
}

 

파일 안의 내용을 변경시키는 방법을 주로 복습했다. 세번째 코드가 잘 되다가 뭘 잘못만졌는지 오류가 나고부터는 실행이 안되는데 이것도 수정을 해봐야겠다. 다음에는 시험에 나왔을 때 어려웠던 원하는 줄에 있는 문장 읽는 법을 알아보겠다. 

+ Recent posts