🌟 구조체
더보기
정의
- 서로 다른 데이터 타입을 하나로 묶어서 관리할 수 있는 사용자 정의 데이터 타입
특징
- 여러 변수를 논리적으로 그룹화
- 메모리 효율적인 데이터 관리
- 복잡한 데이터 구조 표현 가능
🌟 구조체 포인터
더보기
개념
- 구조체 변수의 주소를 저장하는 포인터
활용법
- 함수에서 구조체 포인터 매개변수로 전달받아 효율적인 메모리 사용
- 동적 메모리 할당과 연계하여 유연한 데이터 구조 구현
접근 방법
- (*포인터명).멤버명 또는 포인터명->멤버명
🌟 파일 입출력
더보기
기본 개념
- 프로그램과 외부 파일 간의 데이터 교환
주요 함수들
- fopen(): 파일 열기
- fclose(): 파일 닫기
- fprintf(), fscanf(): 형식화된 파일 입출력
- fread(), fwrite(): 바이너리 파일 입출력
🌟 분활 컴파일
더보기
목적
- 큰 프로그램을 여러 파일로 나누어 관리
장점
- 코드의 모듈화와 재사용성 향상
- 개발 효율성 증대
- 유지보수 용이성
구성요소
- 헤더파일(.h): 함수 선언,구조체 정의
- 소스파일(.c): 함수 구현
🌟 파일입출력과 로그인 구현
더보기
// member.h 헤더파일
#ifndef USER_IO_H
#define USER_IO_H
void input_credentials(char *id, char *password);
void save_to_file(const char *id, const char *password);
void read_from_file();
#endif
// main.c 파일
#include <stdio.h>
#include <string.h>
#include "member.h"
// 헤더에 선언된 함수들을 여기서 직접 구현
void input_credentials(char *id, char *password) {
printf("아이디를 입력해주세요: ");
fgets(id, 100, stdin);
id[strcspn(id, "\n")] = '\0';
printf("비밀번호를 입력해주세요: ");
fgets(password, 100, stdin);
password[strcspn(password, "\n")] = '\0';
}
void save_to_file(const char *id, const char *password) {
FILE *fp = fopen("c.txt", "w");
if (fp == NULL) {
printf("파일을 만들지 못했습니다.\n");
return;
}
fprintf(fp, "%s %s\n", id, password);
fclose(fp);
}
void read_from_file() {
FILE *fp = fopen("c.txt", "r");
if (fp == NULL) {
printf("파일이 열리지 않았습니다.\n");
return;
}
printf("\n[저장된 id, passward]\n");
char buffer[200];
while (fgets(buffer, sizeof(buffer), fp) != NULL) {
printf("%s", buffer);
}
fclose(fp);
}
int main(void) {
char id[100];
char password[100];
input_credentials(id, password);
save_to_file(id, password);
read_from_file();
return 0;
}
'C > Study' 카테고리의 다른 글
C언어 Newwork Study 5 (1) | 2025.07.11 |
---|---|
C언어 Newwork Study 4 (1) | 2025.07.11 |
C언어 Newwork Study 3 (0) | 2025.07.11 |
C언어 Newwork Study 2 (1) | 2025.07.11 |