기초단계/c언어
2022.11.13-1 파일 입출력
춘핑이
2022. 11. 13. 18:39
9. 파일 입출력
9.0 시작 전
define MAX 10000
메인함수 위에 적기#define MAX 10000 는 어디든 MAX=10000이됨
fputs , fgets 각각 쌍으로 사용해야함.
fprintf, fscanf
9.1 파일저장하기 fputs , fgets
char line[MAX]; // 위에서 정의해서 char line[10000]이라는뜻
FILE* file = fopen("E:\\study\\test1.txt", "wb"); // fopen파일열겟다
// r읽기전용 w쓰기전용 a이어쓰기 + t텍스트 b바이너리데이터
if (file == NULL) //파일이 없으면?
{
printf("파일 열기 실패\n");
return 1;
}
fputs("fputs를 이용해서 글을 적어볼게요\n", file); //"작성할내용", file포인터
fputs("잘적히는지 확인해주세요\n", file);
//파일을 열고 나서 닫지 않은 상태에서 어떤 프로그램에 문제가 생기면?
//데이터 손실 발생 가능 그래서 항상 파일을 닫아주는 습관 들이기
fclose(file); // 파일닫고 저장하기9.2 파일읽기 fputs , fgets
FILE* file = fopen("E:\\study\\test1.txt", "rb"); //읽기전용으로 부르기
if (file == NULL)
{
printf("파일 열기 실패\n");
return 1;
}
while (fgets(line, MAX, file) != NULL)
{
printf("%s", line);
}9.3.0 fprintf, fscanf
printf("%d %d %s...")사용하듯이 보통 정형화된 포맷에 대해서 파일 불러올때 사용
int num[6] = { 0, 0, 0, 0, 0, 0 }; //복권 추첨 번호
int bonus = 0; //보너스 번호
char str1[MAX];
char str2[MAX];9.3.1 파일에 쓰기 fprintf, fscanf
FILE* file = fopen("E:\\study\\test2.txt", "wb");
if (file == NULL)
{
printf("파일 열기 실패\n");
return 1;
}
//로또 추첨 번호 저장
fprintf(file, "%s %d %d %d %d %d %d\n", "추첨번호", 1, 2, 3, 4, 5, 6);
fprintf(file, "%s %d\n", "보너스번호", 7);
fclose(file);9.4 파일 읽기 fprintf, fscanf
FILE* file = fopen("E:\\study\\test2.txt", "rb");
if (file == NULL)
{
printf("파일 열기 실패\n");
return 1;
}
fscanf(file, "%s %d %d %d %d %d %d", str1,
&num[0], &num[1], &num[2], &num[3], &num[4], &num[5]);
printf("%s %d %d %d %d %d %d\n", str1,
num[0], num[1], num[2], num[3], num[4], num[5]);
fscanf(file, "%s %d", str2, &bonus);
printf("%s %d\n", str2, bonus);9.5 프로젝트 비밀일기
// 비밀번호를 입력받아서
// 맞는 경우? 비밀일기를 읽어봐서 보여주고 계속 작성하도록 합니다.
// 틀린경우? 경고 메시지를 표시하고 종료합니다.
int main(void)
{
// fgets & fputs 활용
char line[MAX]; //파일에서 불러온 내용을 저장할 변수
char contents[MAX]; // 일기장에 입력할 내용
char password[20]; //비밀번호 입력
char c; //비밀번호 입력할때 키값 확인용(마스킹)
printf("비밀일기에 오신걸을 환영합니다\n");
printf("비밀번호를 입력하세요 : ");
//getchar() 와 getch()의 차이?
//getchar() 엔터를 입력받아야 동작 , getch()키입력시 바로바로 동작
int i = 0;
while (1)
{
c = getch();
if (c == 13) //Enter(아스키코드) 비밀번호 입력 종료
{
password[i] = '\0'; //null값 저장
break;
}
else //비밀번호 입력중
{
printf("*");
password[i] = c;
}
i++;
}
//비밀번호 : chun
printf("\n\n=== 비밀번호 확인 중... === \n\n");
if (strcmp(password, "chun") == 0) //문자열비교strcmp(비교할거, "비교내용") ==0이면 같다
{
printf("=== 비밀번호 확인 완료 === \n\n");
char* fileName = ("E:\\study\\secretdiary.txt");
FILE* file = fopen(fileName, "a+b");
//파일이 없으면 생성, 파일이 있으면 append한다.뒤에서부터 내용을 추가한다
if (file == NULL)
{
printf("파일 열기 실패\n");
return 1;
}
while (fgets(line, MAX, file) != NULL)
{
printf("%s", line);
}
printf("\n\n 내용을 계속 작성하세요 ! 종료하시려면 EXIT를 입력하세요\n\n");
while (1)
{
scanf("%[^\n]", contents); //새줄 \n줄바꿈나오기전까지 읽어들임 즉 한문장씩 저장
getchar(); //엔터입력 [\n]을 flush처리 변기물내리기? 버퍼에남아잇던 엔터줄바꿈없앰
if (strcmp(contents, "EXIT") == 0)
{
printf("비밀일기 입력을 종료합니다\n\n");
break;
}
fputs(contents, file);
fputs("\n", file); // 엔터를 위에서 무시처리 하였음으로 임의로 추가
}
fclose(file);
}
else // 비밀번호 틀린경우
{
printf("===비밀번호가 틀렸어요===\n\n");
printf("당신 누구야 감히 내 일기장을!\n\n");
}
return 0;
}
2022.11.13 리뷰
백준 배열 문제(4단계)를 풀었다. 문제는 항상 즐겁다.
c언어 기본 학습이 끝이 났다.
애초부터 c를 마스터하는 것이 아닌 기본 문법의 구성을 알기 위해 배운것이라 자바 공부를 시작하여야 할 것같다.
앞으로 갈 길이 험난하다. 국비를 가든 부트캠프를 가든 아직은 실력이 많이 모자라 보인다.
천천히 나아가고자 한다.
중요한 것은 꺾이지 않는 마음