언어/C

[코딩자율학습] 19일차 프로젝트 비밀 일기 프로그램

홍시_코딩기록 2024. 3. 28. 23:11

 

<전체코드>

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <conio.h>
#include <string.h>
#define MAX 10000 //매크로 정의

int main(void) {
	char password[20]; //입력받은 비밀번호 저장 배열 선언
	char c; // 입력받은 비밀번호 확인용(마스킹 효과)
	int i = 0; //password 배열의 인덱스용 변수
	char line[MAX];//파일에서 읽어 온 내용 저장
	char contents[MAX] = "";// 일기장에 입력한 내용 저장 (빈값으로 초기화)


	printf("비밀 일기에 오신 것을 환영합니다.\n"); //안내 문구
	printf("비밀번호를 입력하세요.(최대 20자리)");
	while (1) { //비밀번호 입력받기
		c = _getch();
		if (c == 13) { //엔터 -> 비밀번호 입력 종료
			password[i] = '\0';
			break;
		}
		else { //사용자가 비밀번호 입력하는 중
			printf("*");
			password[i] = c;
		}
		i++; //배열 인덱스 증가
	}
	//지정한 비밀번호: fhEhekdcja(로또당첨)
	printf("\n\n === 비밀번호 확인 중 === \n\n"); 
	if (strcmp(password, "fhEhekdcja") == 0) { //strcmp()함수로 입력한 비밀번호 비교
		printf("=== 비밀번호 확인 완료 === \n\n"); //비밀번호가 맞으면 확인 문구 출력
		char* fileName = "C:\\Users\\홍여정\\Desktop\\secret.txt"; //파일명을 포인터 변수에 저장

		//a+모드는 파일이 없으면 생성, 파일이 있으면 뒤에서부터 내용 추가
		FILE* file = fopen(fileName, "a+b"); //파일 포인터 얻기
		if (file == NULL) { //파일 열기
			printf("파일 열기 실패\n");
			return 1;
		}
		while (fgets(line, MAX, file) != NULL) { //fgets()함수로 파일 읽어오기
			printf("%s", line); //파일에서 읽어 온 내용 출력
		}
		printf("\n\n내용을 계속 작성하세요! 종료하려면EXIT를 입력하세요.\n\n");
		while (1) {
			scanf("%[^\n]", contents); //줄바꿈 문자 (\n) 전까지 읽어 옴(한 문장씩)
			getchar(); //엔터를 입력해 줄바꿈 문자 플러시 처리
			if (strcmp(contents, "EXIT") == 0) {
				printf("비밀 일기 입력을 종료합니다.\n\n");
				break;
			}
			fputs(contents, file);
			fputs("\n", file);//줄바꿈 문자를 파일에 추가
		}
			fclose(file); //파일 닫기
	}
	else { //비밀번호가 틀렸을 때
		printf("=== 비밀번호가 틀렸어요. === \n\n");
	}
	return 0;
}

 

<실행화면>

- 비밀번호를 맞게 입력하면 바탕화면에 secret.txt에 텍스트가 업데이트 된다.

 

 

💡 getchar()함수와 _getch() 함수

getchar()함수는 키보드로 원하는 키를 입력한 후 반드시 엔터를 눌러야함.
_getch() 함수는 키를 입력하면 바로 작동

 

💡 플러시 처리

서식 지정자 %[^\n]으로 값을 입력받으면 줄바꿈 문자가 나오기 전까지의 문자열을 저장함.
scanf(()함수나 getchar() 함수로 입력받을 때 값은 변수에 저장되기 전에 입력 버퍼란 곳에 임시로 저장됨.
그래서 서식지정자로 %[^\n]을 지정하면 변수에 저장할 때 문자열만 저장하고 줄바꿈 문자는 버퍼에 그대로 있음. 엔처를 눌러서 입력 받은 줄바꿈 문자를 버리는 것을 플러시 처리라고 함.