c언어 38

[C언어/C++] printf, scanf 함수 변수 입출력 예제(정수, 실수, 줄바꿈 등 포맷 지정자:format specifiers)

[C언어/C++] printf, scanf 함수 변수 입출력 예제(정수, 실수, 줄바꿈 등 포맷 지정자:format specifiers) 안녕하세요 JollyTree입니다 (•̀ᴗ•́)و printf, scanf 함수는 C/C++ 언어에서 표준 입력과 출력을 지원하는 함수로 콘솔 형태의 프로그램에서 가장 많이 사용되는 함수입니다. 표준 입출력 헤더인 stdio.h에 정의된 가장 기본적인 함수이며 자료형에 따라 %d, %f, %u 등 포맷 지정자(format specifier)를 사용해 주어야 합니다. 포맷 지정자는 종류가 많아 자주 사용하는 지정자는 익숙하지만 그렇지 않은 것은 매번 자료를 찾아봐야 하는 번거로움이 있습니다. 알아두면 편리한 포맷 지정자를 예제와 함께 핵심 내용 위주로 정리하였습니다. ■..

[C/C++] 윈도우 소켓(Winsock) 1:N 채팅/통신 프로그램 구현하기 #4:: TCP 클라이언트 구현(소스코드)

안녕하세요 JollyTree입니다 (•̀ᴗ•́)و 먼저 클라이언트 기능을 구현해 보았습니다. 클라이언트는 기본적으로 서버에 접속하여 채팅 메시지를 송·수신하는 기능을 포함하며 서버와 같이 여러 클라이언트들의 소켓을 관리할 필요가 없어 서버에 비해 비교적 소스코드가 간단합니다. ■ 클라이언트 주요 기능 - 소켓 초기화 및 서버 접속 - 소켓으로 부터 채팅 메시지와 서비스 종료 메시지를 수신하기 위한 FD_READ, FD_CLOSE 이벤트 등록 - 소켓을 이용한 채팅 메시지 송신 및 수신 FD_READ, FD_CLOSE 등의 네트워크 이벤트가 궁금하시면 WSAEventSelect functions(winsock2.h) MS 자료를 참고하세요. main() 함수 내 코드를 위주로 설명을 하면, 먼저 프로그램의..

[C/C++] 윈도우 소켓(Winsock) 1:N 채팅/통신 프로그램 구현하기 #3:: TCP 서버 구현하기(소스코드)

안녕하세요 JollyTree입니다 (•̀ᴗ•́)و 이번에는 채팅 서버 기능을 구현해 보았습니다. 1:N 서버는 기본적으로 N개의 클라이언트(사용자)의 접속이 필요하므로 N개의 소켓을 관리하고 각 클라이언트들로부터 보내진 메시지를 다수의 클라이언트로 재전송하는 기능을 포함합니다. ■ 서버 주요 기능 - 소켓 초기화 및 클라이언트 접속 대기 - 소켓으로부터 클라이언트 접속, 채팅 메시지와 서비스 종료 메시지를 수신하기 위한 FD_ACCEPT, FD_READ, FD_CLOSE 이벤트를 등록 - 소켓을 이용한 채팅 메시지 수신과 전달 - 클라이언트 연결/접속 종료 상태와 공지사항 전달 다수의 클라이언트들은 소켓, 이벤트, 별명, IP주소 정보가 포함된 SOCK_INFO 구조체를 통해 관리되며 SOCK_INFO ..

[C/C++] 윈도우 소켓(Winsock) 1:N 채팅/통신 프로그램 구현하기 #2:: 프로그램 구조 및 Winsock 라이브러리 설정

안녕하세요 JollyTree입니다 (•̀ᴗ•́)و 1:N 채팅 프로그램은 기본적으로 TCP 프로토콜을 기반으로 1개의 서버가 N개의 클라이언트(사용자)를 지원합니다. 아래 개념도에서와 같이 각 클라이언트는 서버를 통해 서로 채팅 메시지를 주고받을 수 있어요. ■ 채팅 프로그램 기능 다음은 채팅 프로그램의 기본 기능입니다. - 클라이언트 접속/종료 알림 기능 : 새로운 클라이언트가 접속하거나 접속을 종료하면 모든 클라이언트에게 알림 - 1:N 채팅 지원 기능 : 서버가 채팅 메시지를 모든 클라이언트에게 전달하여 1:N 채팅을 지원 - 서버 공지 기능 : 서버가 공지 메시지를 모든 클라이언트에게 전달 - 서버 종료 알림 기능 : 서버가 종료되면 모든 클라이언트에게 종료 메시지를 전달 Visual Studio..

[C/C++] 윈도우 소켓(Winsock) 1:N 채팅/통신 프로그램 구현하기#1:: 소개

안녕하세요 JollyTree입니다 (•̀ᴗ•́)و 인터넷이 일반화되어 있는 요즘은 카카오톡, 웹브라우저 등 대부분의 프로그램들이 네트워크 통신 기능을 기본적으로 제공하고 있습니다. 그래서 이번에는 윈속(Winsock)을 이용한 네트워크 통신 프로그램 구현 방법에 대해 스터디한 글을 짧은 연재로 기록합니다. 윈도우, 리눅스 등의 운영체제에서 네트워크 통신 프로그램 개발할 수 있는데요. 기본적으로 소켓(socket) 라이브러리를 통해 프로그램을 개발할 수 있습니다. sqrt(), pow(), abs(), fabs() 등과 같은 수학 관련 라이브러리를 사용하듯이 네트워크 프로그래밍을 하려면 socket(), bind(), accept(), send(), recv() 등과 같은 소켓 관련 함수를 사용합니다. 윈..

[C/C++] C언어 수학 함수(round, ceil, floor) 직접 구현 하기(예제포함)

안녕하세요 JollyTree입니다 (•̀ᴗ•́)و 지난번에는 abs(), fabs(), sqrt(), pow() 수학 함수를 직접 구현하여 C/C++ 라이브러리 함수와 비교하는 자료를 포스팅하였습니다. 이번에는 추가적으로 다음 3개 수학 함수들을 직접 구현하여 컴파일러가 제공하는 라이브러리 함수와 비교하고자 합니다. o 반올림 값을 구하는 round() 함수 o 소수점 올림 값을 구하는 ceil() 함수 o 소수점 내림 값을 리턴하는 floor() 함수 구현한 사용자 함수가 올바른 결과 값이 구해지는지의 검증은 지난 번과 마찬가지로 동일한 실험 데이터를 가지고 C/C++ 라이브러리 함수와 비교하였습니다. double r[] = { 3.2, 3.7, -3.2, -3.7, 5.1, -6.6 }; double..

[C/C++] C언어 수학 함수(pow, sqrt, abs, fabs) 직접 구현 하기(예제포함)

안녕하세요 JollyTree입니다 (•̀ᴗ•́)و C/C++ 언어는 기본적으로 많은 수학 관련 함수를 지원합니다. 수학 과련 함수들을 사용하기 위해서는 #include 를 소스코드에 추가하여 사용합니다. 이미 준비된 라이브러리 함수를 사용하면 아주 편리하지만 이런 라이브러리 함수들이 내부적으로 어떻게 구현되어 있을까?라는 호기심이 생깁니다. 그래서 C/C++ 언어가 제공하는 수학 함수 중에 비교적 많이 사용되는 함수를 컴파일러가 제공해 주는 라이브러리를 사용하지 않고 스터디 차원에서 직접 구현해 보았습니다. o 정수의 절대값을 계산하는 abs() 함수 o 실수의 절대값을 계산하는 fabs() 함수 o 제곱근을 계산하는 sqrt() 함수 o 거듭 제곱을 계산하는 pow() 함수 직접 구현한 사용자 정의 함..

[C/C++] 단위 변환(길이, 시간, 온도, 속도, 넓이, 무게) 하기

안녕하세요 JollyTree입니다 (•̀ᴗ•́)و 일상 생활에서 자주 사용하는 단위를 변환하는 예제입니다. 단위변환 대상은 길이, 온도, 시간, 부피, 속도, 넓이, 무게입니다. 프로그램 소스코드(Source Code): 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 9..

[C/C++] 배열 메모리 초기화(리셋) 및 복사(reset array & copy array)

[C/C++] 배열 메모리 초기화(리셋) 및 복사(reset array & copy array) 안녕하세요 JollyTree입니다 (•̀ᴗ•́)و 이번 포스팅은 정수형 배열, 문자형 배열, 구조체형 배열의 초기화(리셋)와 복사 방법입니다. 작성한 예제를 보면서 정리하겠습니다. 예제(Example): 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80..

[C언어 기초코딩: 예제로 간단 정리] 12. 동적 메모리 할당과 파일 입출력(dynamic memory allocation, file input output)

JollyTree의 C언어 기초코딩: 예제로 간단 정리 - 12. 동적 메모리 할당과 파일 입출력(dynamic memory allocation, file input output) 동적 메모리 할당(dynamic memory allocation) 메모리를 할당하는 방법은 크게 정적(static) 할당과 동적(Dynamic) 할당이 있습니다. 정적 할당은 지난 8.배열(array)에서 정리한 배열이 대표적인 정적 할당 방법입니다. 배열과 같은 정적 할당은 프로그램이 시작되기 전에 미리 크기가 결정됩니다. 더 쉽게 표현하면 개발자가 크기를 예측하여 적절한 크기를 결정하여 코딩합니다. int num[10]; char name[50]="Hong Gildong; float avg[5]; 정적할당은 메모리의 크기가..