Rylah's Study & Daily Life

10. 파일 입출력 본문

Study/C

10. 파일 입출력

Rylah 2021. 11. 3. 12:19
#include <stdio.h>
#include <stdlib.h>


#define MAX 10000
int main(void) {
	
	// 파일 입출력
	// 파일에 어떤 데이터를 저장
	// 파일에 저장된 데이터를 불러오기

	// fputs , fgets 쌍 -> 문자열 저장
	// fprintf, fscanf 쌍
	//char line[MAX]; // char line[10000]

	////파일 열기
	//FILE* file = fopen("c:\\test1.txt", "wb"); // r : read(읽기) , w : write(쓰기) , a : append(이어쓰기) // t(text) b(바이너리 데이터)
	//if (file == NULL) {
	//	printf("파일 열기 실패\n");
	//	return 1;
	//}

	//fputs("fputs를 이용해서 글을 적어볼게요 \n", file);
	//fputs("잘 적히는지 확인해주세요.\n", file);

	////파일 닫기
	//// 파일을 열고나서 닫지 않은 상태에서 어떤 프로그램에 문제가 생기면?
	//// 데이터 손실이 발생 가능. 파일을 닫아주는 습관을 길러주세요.
	//fclose(file);

	//FILE* file = fopen("c:\\test1.txt", "rb"); // r : read(읽기) , w : write(쓰기) , a : append(이어쓰기) // t(text) b(바이너리 데이터)
	//if (file == NULL) {
	//	printf("파일 열기 실패\n");
	//	return 1;
	//}

	//while (fgets(line, MAX, file) != NULL) {
	//	printf("%s", line);
	//}

	////fputs("fputs를 이용해서 글을 적어볼게요 \n", file);
	////fputs("잘 적히는지 확인해주세요.\n", file);

	////파일 닫기
	//// 파일을 열고나서 닫지 않은 상태에서 어떤 프로그램에 문제가 생기면?
	//// 데이터 손실이 발생 가능. 파일을 닫아주는 습관을 길러주세요.
	//fclose(file);


	// fprintf , fscanf 쌍
	// printf("%d %d %s ..........");
	// scanf ("%d %d", &num1);

	int num[6] = { 0, }; // 추첨 번호
	int bonus = 0; // 보너스 번호

	char str1[MAX];
	char str2[MAX];

	FILE* fp = fopen("d:\\test2.txt", "w");
	if (fp == NULL) {
		printf("파일 열기 실패 \n");
		return 1;
	}
	// 로또 추첨 번호 저장
	fprintf(fp, "%s %d %d %d %d %d %d\n", "Number", 1, 2, 3, 4, 5, 6);
	fprintf(fp, "%s %d\n", "Bonus", 7);

	fclose(fp);

	// 파일 읽기 
	FILE* fp1 = fopen("d:\\test2.txt", "r");
	if (fp1 == NULL) {
		printf("파일 열기 실패 \n");
		return 1;
	}
	fscanf(fp1, "%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(fp1,"%s %d",str2, &bonus);
	printf("%s %d\n", str2, bonus);
	fclose(fp1);

	return 0;
}

#include <stdio.h>

// 비밀 번호를입력 받아서 맞는 경우 비밀일기를 읽어와서 보여주고 계속 작성하도록 합니다.
// 틀린 경우 경고 메시지를 표시하고 종료합니다.

#define MAX 10000
int main() {

	// fgets fputs 

	char line[MAX]; // 파일에서 불러올 내용을 저장할 변수
	char contents[MAX]; //일기장에 입력할 내용

	char password[20]; // 비밀번호 입력
	char c; // 비밀번호 입력할 때 키값 확인용 (마스킹)

	printf("비밀 일기에 오신 것을 환영합니다.\n");
	printf("비밀 번호를 입력하세요 : ");

	// getchar() / getch()의 차이
	// getchar() = ENTER를 입력 받아야 동작
	// getch() 키 입력시에 바로바로 동작함
	int i = 0;
	while (1) {
		c = getch();
		if (c == 13) // Enter 비밀번호 입력 종료
		{
			password[i] = '\0';
			break;
		}
		else { // 비밀번호 입력 중
			printf("*");
			password[i] = c;
		}
		i++;
	}

	// 비밀번호 나도코딩 skehzheld
	printf("\n\n === 비밀번호 확인 중... ===\n\n");

	if (strcmp(password, "skehzheld") == 0) { // 비밀번호 일치
		printf("=== 비밀번호 확인 완료 === \n\n");

		char* fileName = "diary.txt";
		FILE* fp = fopen(fileName, "a+b"); // 파일이 없으면 생성, 파일이 있으면 append한다. 뒤에서 내용을 추가한다.
		if (fp == NULL) {
			printf("파일 열기 실패\n");
			return 1;
		}

		while (fgets(line, MAX, fp) != NULL) {
			printf("%s", line);
		}

		printf("\n\n 내용을 계속 작성하세요! 종료하시려면 EXIT를 입력하세요 \n\n");

		while (1) {
			scanf("%[^\n]", contents);  // 새 줄 \n이 나오기 전까지 읽어들임 (한 문장씩)
			getchar(); // Enter 입력 (\n) Flush 처리
			if (strcmp(contents, "EXIT") == 0) {
				printf("비밀일기 입력을 종료합니다.\n\n");
				break;
			}

			fputs(contents, fp);
			fputs("\n", fp); // 엔터를 위한 추가 엔터키를 무시했으므로 임의로 추가

		}
		fclose(fp);

	}


	return 0;

}

'Study > C' 카테고리의 다른 글

Linux 02. 시스템 콜 및 라이브러리 사용  (0) 2022.01.15
Linux 01. Hello World  (0) 2022.01.15
09. 구조체  (0) 2021.11.03
08. 다차원 배열  (0) 2021.11.03
07. 포인터 (Pointer)  (0) 2021.11.02