25.06.30 개발일지
[C언어 교재학습(구조체, 구조체 포인터, 파일 입출력, 분할 컴파일), 파일입출력과 로그인 구현]
구조체
다양한 형태의 데이터를 처리할 때 기본으로 사용
일반자료형,복합자료형,구조체안에 구조체 모두 가능

struct student : 구조체 선언
struct student s1 -> s1 : 변수 선언
s1.num -> . : member 접근 연산자

typedef : 정의한 구조체를 다시 정의(자료형에 대한 새로운 별명)
typedef struct student Student;
struct student : 구조체 이름
Student : 새 자료형 이름
구조체 포인터

ps. 까지만 쓰면 자동완성된다.
구조체 포인터로 멤버 접근( -> 연산자 사용)

표준입출력
출처 입력
getch()
: 키보드로 입력한 문자 하나를 반환하는 함수, 출력 x, 버퍼사용x
putch()
: 매개변수로 넘겨받은 문자 하나를 모니터로 출력하는 함수, 버퍼사용x
getche()
: 키보드로 입력한 문자 하나를 반환하는 함수, 출력 o, 버퍼사용x
getchar()
: 키보드로 입력한 문자 하나를 반환하는 함수, 버퍼사용o
putchar()
: 매개변수로 넘겨받은 문자 하나를 모니터로 출력, 버퍼사용o
파일 입출력

FILE* fp; -> fp라는 포인터 변수, 주소값
fopen 함수 : 두 개의 다른 파일의 연결통로, 파일 개방 함수
fp = fopen("a.txt", "r");
a.txt -> 개방할 파일명
r : ->개방모드
r : 읽기 w : 쓰기 +a : 읽고 쓰기 둘 다 가능
fclose : 닫기 함수(반드시 닫아줘야한다)
fputc : 문자 하나를 내 프로그램 외부로 내보낼 때 사용
fgetc : 문자 하나를 입력받을 때 사용
fgets, fputs : 한 줄씩 입출력

분할 컴파일 + 전처리 의미
출처 입력
헤더파일
#include "student.h" -> 사용하는 방법(복사해서 붙여넣는 기능)
#define PI 3.1459
정의해놓으면 나중에 PI 가 3.1459로 치환된다.
분할컴파일
.c 파일 두개를 각각 컴파일 해서 한 개의 실행파일로 합칠 수 있다.
gcc test.c test2.c file.c -o test
외부 라이브러리 경로
gcc test.c test2.c file.c -o test -lthread

헤더 파일의 필요성과 중복 문제 해결 방법
각각 <stdio.h> 포함하고 있어 중복된다.
#ifndef _POINT_H_
#define _POINT_H_ -> _POINT_H_ 매크로명 정의
#endif -> 사용해준다.(중복되는 부분이 나오면 무시해라.)

스트림과 버퍼
출처 입력
스트림(stream) : 자동차 운전 방법, 한식 요리법, 정장, 우산과 같은 개념적 모델, 방법론
모든 입출력장치에서 파일형태로 데이터를 주고 받는다.
프로그램과 입출력 장치 사이의 다리 역할을 하는 논리적인 파일
문자 배열 형태의 버퍼를 가지고 있다.(이들 정보를 구조체로 묶어 보관한다.)
이때 스트림 파일이 사용하는 구조체의 이름이 FILE
FILE 이라는 구조체에 a.txt라는 파일도 있고, 버퍼라는 파일도 있다.
버퍼(buffer) : 그 흐름을 실제로 성능 좋게 구현하기 위해 기술적 장치, 실제 소스코드로 다루어지는 도구
여러 입출력 장치간에 데이터를 읽고 쓰는 동안 발생하는 속도 차이를 해결한다.
스트림과 같은 데이터의 가상 연결 통로에서 데이터를 읽고 쓰는 동안 발생하는 속도 차이를 해결하기 위해 데이터가 임시 저장되는 메모리의 물리적 공간을 의미

네트워크 프로그래밍과 소켓
출처 입력
전화기 -> 소켓(socket 함수)
중복되지 않는 번호 -> IP(bind 함수)
전화받을 준비(연결요청 가능상태로 변경) -> listen 함수
서버 : 항상 대기 상태, 사용자가 사용할 때만 실행
연결요청에 대한 수락 -> accept 함수
클라이언트 : 연결 요청, connect 함수
파일입출력과 로그인 구현
출처 입력
#ifndef _MEMBER_H_
#define _MEMBER_H_ // -> _MEMBER_H_ 매크로명 정의
struct
{
char id[100]; // ID 입력 버퍼
char pw[100]; // PW 입력 버퍼
int c; //문자 읽기용 변수
} member; //익명의 구조체를 정의함과 동시에 변수 member를 선언(and 정의)
#endif
: member.h 파일
#include <stdio.h>
#include "member.h"
int main(void)
{
FILE* fp;
printf("ID를 입력하세요: ");
scanf("%99s", member.id); // . -> 멤버 접근 연산자
printf("PW를 입력하세요: ");
scanf("%99s", member.pw);
fp = fopen("id.txt", "a+"); // 읽기, 쓰기 모드로 파일 개방
if (fp == NULL)
{
printf("파일이 열리지 않았습니다.\n");
return 1;
}
// 파일 끝으로 이동해서 추가
fseek(fp, 0 ,SEEK_END);
// 입력 데이터를 파일에 기록
fprintf(fp, "ID: %s\n", member.id);
fprintf(fp, "PW: %s\n", member.pw);
printf("ID와 PW가 파일에 저장되었습니다.\n");
rewind(fp);
while ((member.c = fgetc(fp)) !=EOF) //fgetc : 문자 하나를 입력받을 때 사용, EOF = end of file
{
putchar(member.c); //매개변수로 넘겨받은 문자 하나를 모니터로 출력
}
fclose(fp); // 파일 닫기
return 0;
}
: member.c 파일


: 실행결과
아이디와 패스워드를 입력하면 id.txt 파일에 저장되고
지금까지 id.txt 파일에 저장된 아이디와 패스워드 정보가 모두 출력된다.
'6월 개발일지' 카테고리의 다른 글
| 25.06.28 개발일지(C언어 콘솔게임 만들기) (0) | 2025.11.07 |
|---|---|
| 25.06.27 개발일지(C언어 콘솔게임 만들기) (0) | 2025.11.07 |
| 25.06.26 개발일지(C언어 콘솔게임 만들기) (0) | 2025.11.07 |
| 25.06.25 개발일지(C언어 콘솔게임 만들기) (0) | 2025.11.07 |
| 25.06.24 개발일지(C언어 콘솔게임 만들기) (0) | 2025.11.07 |