C Network Study 1

2025. 8. 11. 09:35·NETWORK/Assignment

과제 1 - C언어 교재 학습

​

구조체

구조체 포인터(함수에서 구조체 포인터 매개변수로 전달받아 사용하는 법)

파일 입출력

분할 컴파일

 

17. 사용자 정의 자료형(구조체)​

기본 사용법

#include<stdio.h>

struct student{
    int num;
    double grade;
}; //세미콜론은 꼭 붙여줘야 함

-> student는 구조체 자료형이 됨

int main(void){
    struct student s1; //구조체 자료형 변수 s1을 선언

    //구조체 멤버를 변수로 사용
    s1.num = 2;
    s1.grade = 2.7;
    
    return 0;
}

-> int, double, char 처럼 자료형 선언 후 변수명 적기

 

구조체 포인터

#include<stdio.h>

struct student{ //구조체 선언
    int num;
    double grade;
};

int main(void){
    struct student s1; //구조체 자료형 변수 s1을 선언
    s1.num = 1; //멤버 num 변수
    s1.grade = 1.5; //멤버 grade 변수

    struct student* p = &s1; //구조체 포인터 p에 s1의 주소 저장
    printf("%d\n", (*p).num); //구조체 포인터 역참조로 멤버 num 접근
    printf("%.2lf\n", p->grade); //'->' 연산자 사용

    return 0;
}

구조체 포인터 선언을 하면 포인터 변수를 구조체 변수처럼 사용할 수 있다 !


18. 파일 입출력

사용이유

대부분 데이터는 용량이 큰 보조 메모리인 hdd나 ssd에 저장하는데 이런 파일에 접근하여 내용을 저장하고, 불러들여 출력하기 위해서 사용함

​

기본 사용법

읽기(r), 파일이 없는 경우 NULL을 반환하므로 이 경우를 알려주는 출력문을 넣어야 함

쓰기(w), 파일이 없는 경우 생성함

#include<stdio.h>

int main(void){
    FILE *fp; //파일 포인터

    fp = fopen("a.txt", "r"); //읽기 전용으로 파일개방
    if (fp == NULL){
        printf("파일이 열리지 않습니다.\n");
        return 1;
    }
    printf("파일이 열렸습니다.\n");
    fclose(fp); //파일닫기

    return 0;
}

 

fgets(문자열 배열, 크기, 입력방식), fputs(문자열 배열, 출력방식) 활용

입력방식과 출력방식에는

표준 입출력(stdin, stdout)을 쓸 수도 있고

파일 포인터 변수를 통해서 파일에서 입력 또는 출력을 할 수 있음

-> 범용적

#include<stdio.h>

int main(void){
    FILE *fp;
    char id[100];

    printf("ID 입력 : "); //입력 받아 id 배열에 저장
    fgets(id,sizeof(id),stdin);
    fp = fopen("id.txt", "w"); //쓰기 모드로 파일 오픈
    if(fp == NULL){
        printf("파일 열기 실패");
        return 1;
    }
    fputs(id,fp); //id 배열에 있는 문자열을 파일에 출력
    fclose(fp); //파일닫기

    fp = fopen("id.txt", "r"); //읽기 모드로 파일 오픈
    if(fp == NULL){
        printf("파일 열기 실패");
        return 1;
    }
    fgets(id,sizeof(id),fp); //파일에 있는 문자열을 id 배열에 저장
    fputs(id,stdout); //id 배열을 표준 출력 방식으로 출력
    fclose(fp); //파일닫기

    return 0;
}

 

fscanf(파일 포인터 변수, scanf와 같음), fprintf(파일 포인터 변수, printf와 같음) 활용

현재로써는 fgets와 fputs와 달리 파일을 통한 출력, 입력만을 하는 한정적 기능을 하는 것 같아보임

#include<stdio.h>

int main(void){
    FILE *fp;
    char id[100];

    printf("ID 입력 : "); //입력 받아 id 배열에 저장
    scanf("%s",id);
    fp = fopen("id.txt", "w"); //쓰기 모드로 파일 오픈
    if(fp == NULL){
        printf("파일 열기 실패");
        return 1;
    }
    fprintf(fp,"%s",id); //id 배열에 있는 문자열을 파일에 출력
    fclose(fp); //파일닫기

    fp = fopen("id.txt", "r"); //읽기 모드로 파일 오픈
    if(fp == NULL){
        printf("파일 열기 실패");
        return 1;
    }
    fscanf(fp,"%s",id); //파일의 문자열을 입력하여 id 배열에 저장
    printf("%s",id); //id 배열 출력
    
    return 0;
}

 

19. 전처리와 분할 컴파일

전처리

구조체 선언 후 헤더파일로 저장(~~~.h)

typedef struct{
    int num;
    char name[20];
} Student;

 

메인파일에서 쌍따옴표("")로 헤더파일 복사

#include<stdio.h>
#include"student.h" //사용자 헤더 파일 가지고 오기

int main(void){
    //~~~~

    return 0;
}

위와 같은 효과를 가지고 있다고 함.

​

분할 컴파일

IDE(통합개발환경)의 경우 여러 .c 파일을 분할 컴파일을 제공함

그 외에는 터미널에서 직접 컴파일을 해야함

예를 들어 main.c sub.c 파일이 있다면

gcc -c main.c

gcc -c sub.c

gcc main.o sub.o -o totalmain

또는

gcc main.c sub.c -o totalmain

로 해야함.

​

헤더파일의 중복문제

#ifndef _POINT_H_ //매크로명이 정의되어 있지 않으면
#define _POINT_H_ //매크로명을 정의함
~
#endif //끝

위의 매크로 조건이 제일 위에 정의되어 있으면 이후 이를 참조한 헤더파일이 들어갔을 때 조건이 거짓이 되어 다시 추가되지 않는다


과제 2 - 파일입출력과 로그인 구현

​

member.h 헤더 파일로 분할해서, 회원정보 저장하는 구조체 구현(ID, PW 등)

​

main.c 파일에서

​

1) ID, PW 입력 >> 파일로 내보내기

2) 내보낸 텍스트 파일로 저장한 ID, PW 값을 내 소스코드로 불러와서 출력 (or ID PW 사용자 입력 후 비교 매칭)

 

헤더

typedef struct{
    char id[20];
    char password[20];
} Membership;

 

메인

#include<stdio.h>
#include"membership.h" // 사용자 정의 헤더

int main(void){
    Membership a = {"",""};
    FILE *fp;                   
    char buffer[100];

    printf("아이디 입력 : ");
    fgets(a.id,sizeof(a.id),stdin);
    printf("비밀번호 입력 : ");
    fgets(a.password,sizeof(a.password),stdin);

    fp = fopen("membership.txt", "w"); 
	if (fp == NULL)             
	{
		printf("파일을 만들지 못했습니다.\n");
		return 1;
	}
    fputs(a.id, fp);
    fputs(a.password, fp);
    fclose(fp);

    fp = fopen("membership.txt", "r");
    if (fp == NULL)              
	{
		printf("파일을 만들지 못했습니다.\n");
		return 1;
	}
    while(fgets(buffer, sizeof(buffer),fp) != NULL){
        printf("%s", buffer);
    }
    fclose(fp);
    return 0;
}
 

​

과제 3 - (예습)TCP/IP 소켓 프로그래밍

​

ch. 0 사전학습

ch. 1 개요

'NETWORK > Assignment' 카테고리의 다른 글

C Network Study4~5  (0) 2025.08.24
C Network Study 3  (0) 2025.08.13
C Network Study 2  (0) 2025.08.13
'NETWORK/Assignment' 카테고리의 다른 글
  • C Network Study4~5
  • C Network Study 3
  • C Network Study 2
m_Dev
m_Dev
  • m_Dev
    m_Dev
    m_Dev
  • 전체
    오늘
    어제
    • 분류 전체보기
      • MAIN STUDY
        • 정보보안
        • 빅데이터
        • 정보처리
        • 컴퓨터 구조
        • 기타
      • JOB
        • Study
        • Project
      • LMS 7
        • 개발일지
      • FRAMEWORK
        • Qt
        • MFC
        • Winform
        • WPF
        • MAUI
      • NETWORK
        • Study
        • Assignment
      • PYTHON
        • Set
        • Study
        • Assignment
        • Project
      • C
        • Set
        • Study
        • Assignment
        • Project
      • C++
        • Set
        • Study
        • Assignment
        • Project
      • C#
        • Set
        • Study
        • Assignment
        • Project
      • DATABASE
        • MySQL
        • SQLite
      • IDE
        • VisualStudioCode
        • VisualStudio
        • Pycharm
        • Colab
      • 기타
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
m_Dev
C Network Study 1
상단으로

티스토리툴바