한 글자씩 쓰기
텍스트 파일에 한 글자씩 쓰는 함수는 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;
}
파일 안의 내용을 변경시키는 방법을 주로 복습했다. 세번째 코드가 잘 되다가 뭘 잘못만졌는지 오류가 나고부터는 실행이 안되는데 이것도 수정을 해봐야겠다. 다음에는 시험에 나왔을 때 어려웠던 원하는 줄에 있는 문장 읽는 법을 알아보겠다.
'프로그래밍 언어 > c' 카테고리의 다른 글
구조체와 공용체 (0) | 2021.01.10 |
---|---|
포인터와 함수 그리고 void형 포인터 (2) | 2021.01.07 |
c언어 (1) - 포인터 (0) | 2021.01.05 |
C언어 파일 입출력 (2) (0) | 2021.01.03 |
[오류] C언어의 Segmentation fault 오류에 대해서 알아보자 (0) | 2020.12.31 |