CHAPTER 13 - 0083tony/Core-C-Programming GitHub Wiki

์ „์ฒ˜๋ฆฌ๊ธฐ์™€ ๋ถ„ํ•  ์ปดํŒŒ์ผ

  • 1๋ฒˆ ๋ฌธ์ œ

low byte์™€ high byte๋กœ ์›Œ๋“œ(2byte) ํฌ๊ธฐ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“œ๋Š” ํ•จ์ˆ˜ ๋งคํฌ๋กœ์™€ low word์™€ high word๋กœ ๋”๋ธ”์›Œ๋“œ(4byte) ํฌ๊ธฐ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“œ๋Š” ํ•จ์ˆ˜ ๋งคํฌ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
typedef unsigned char BYTE; // BYTE๋ฅผ unsigned char๋กœ ์ •์˜
typedef unsigned  short WORD; // WORD๋ฅผ unsigned  short๋กœ ์ •์˜
typedef unsigned long DWORD; // DWORD๋ฅผ unsigned long๋กœ ์ •์˜
#define MAKEWORD(x,y) ((BYTE)x|(WORD)y<<8)// y๋ฅผ ์™ผ์ชฝ์œผ๋กœ 8๋ฒˆ ์‰ฌํ”„ํŠธ ์—ฐ์‚ฐ
#define MAKEDWORD(x,y) ((WORD)x|(DWORD)y<<16)// y๋ฅผ ์™ผ์ชฝ์œผ๋กœ 16๋ฒˆ ์‰ฌํ”„ํŠธ ์—ฐ์‚ฐ
// winsock2.h ํ•จ์ˆ˜์— ํฌํ•จ๋œ MAKEWORD๋กœ๋„ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„๊ฐ€๋Šฅ
int main(void) {
	short a, b, c, d;

	printf("low and high byte? ");
	scanf("%hi %hi", &a, &b);
	printf("WORD data: %x\n", MAKEWORD(b, a));

	printf("low and high byte? ");
	scanf("%hi %hi", &c, &d);
	printf("WORD data: %x\n", MAKEWORD(d, c));

	printf("DWORD data: %x\n", MAKEDWORD(MAKEWORD(d, c), MAKEWORD(b, a)));
	return 0;
}
[์‹คํ–‰ ๊ฒฐ๊ณผ]

low and high byte? 0x12 0x34
WORD data: 1234
low and high byte? 0x56 0x78
WORD data: 5678
DWORD data: 12345678
  • 2๋ฒˆ ๋ฌธ์ œ

ํฌ๊ธฐ๊ฐ€ 10์ธ int ๋ฐฐ์—ด์„ ํŠน์ • ๊ฐ’์œผ๋กœ ์ฑ„์šฐ๋Š” ํ•จ์ˆ˜ ๋งคํฌ๋กœ ํ”„๋กœ๊ทธ๋žจ

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
// ํฌ๊ธฐ๊ฐ€ 10์ธ ๋ฐฐ์—ด์— N์ด๋ผ๋Š” ๊ฐ’์„ ์ฑ„์šด๋‹ค.
#define FILL_ARRAY(arr,size,value) for(int i=0;i<size;i++){arr[i]=value;}

// ๋ฐฐ์—ด์— ์ €์žฅ๋œ ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค. ๋ฐฐ์—ด์˜ ํฌ๊ธฐ 10๋งŒํผ ๋ฐ˜๋ณต
#define PRINT_ARRAY(arr,size) printf("[N]"); for(int i=0;i<size;i++){printf("%3d",arr[i]);}
int main(void) {
	int N, arr[10];

	printf("์ •์ˆ˜ ๋ฐฐ์—ด์˜ ์ดˆ๊ธฐ๊ฐ’? ");
	scanf("%d", &N);
	FILL_ARRAY(arr, 10, N);
	PRINT_ARRAY(arr, 10);
	return 0;
}
[์‹คํ–‰ ๊ฒฐ๊ณผ]

์ •์ˆ˜ ๋ฐฐ์—ด์˜ ์ดˆ๊ธฐ๊ฐ’? 17
[N] 17 17 17 17 17 17 17 17 17 17
  • 3๋ฒˆ ๋ฌธ์ œ

2๋ฒˆ ๋ฌธ์ œ์˜ ํ•จ์ˆ˜ ๋งคํฌ๋กœ์— ์‹ค์ˆ˜๋‚˜ ๋ฌธ์ž๊ฐ€ ๋ฐฐ์—ด์˜ value๋กœ ์ฃผ์–ด์ ธ๋„ ์ถœ๋ ฅ์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ์ˆ˜์ •

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
// ํฌ๊ธฐ๊ฐ€ 10์ธ ๋ฐฐ์—ด์— N์ด๋ผ๋Š” ๊ฐ’์„ ์ฑ„์šด๋‹ค.
#define FILL_ARRAY(arr,size,value) for(int i=0;i<size;i++){arr[i]=value;}

// ๋ฐฐ์—ด์˜ ์ด๋ฆ„์ด Xrr์ด๋ฉด ์‹ค์ˆ˜๋กœ ์ถœ๋ ฅ Yrr์ด๋ฉด ๋ฌธ์ž๋กœ ์ถœ๋ ฅ
#define PRINT_ARRAY(arr,size) if (#arr=="Xrr"){printf("[N]"); for(int i=0;i<size;i++){printf(" %.1f ",arr[i]);}}if (#arr=="Yrr"){printf("[N]"); for(int i=0;i<size;i++){printf("%2c ",arr[i]);}}

int main(void) {
	float Xrr[10];
	char Yrr[10];
	float X;
	char Y;
	
	printf("์‹ค์ˆ˜ ๋ฐฐ์—ด์˜ ์ดˆ๊ธฐ๊ฐ’? ");
	scanf("%f", &X);
	FILL_ARRAY(Xrr, 10, X);
	PRINT_ARRAY(Xrr, 10);

	getchar();
	printf("\n๋ฌธ์ž ๋ฐฐ์—ด์˜ ์ดˆ๊ธฐ๊ฐ’? ");
	scanf("%c", &Y);
	FILL_ARRAY(Yrr, 10, Y);
	PRINT_ARRAY(Yrr, 10);
	return 0;
}
[์‹คํ–‰ ๊ฒฐ๊ณผ]

์‹ค์ˆ˜ ๋ฐฐ์—ด์˜ ์ดˆ๊ธฐ๊ฐ’? 1.0
[N] 1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0
๋ฌธ์ž ๋ฐฐ์—ด์˜ ์ดˆ๊ธฐ๊ฐ’? A
[N] A  A  A  A  A  A  A  A  A  A
  • 4๋ฒˆ ๋ฌธ์ œ

์ง์‚ฌ๊ฐํ˜•์˜ ๋ฉด์ ์„ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜ ๋งคํฌ๋กœ์™€ ์›์˜ ๋ฉด์ ์„ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜ ๋งคํฌ๋กœ๋ฅผ ์‚ฌ์šฉํ•œ ํ”„๋กœ๊ทธ๋žจ

#define _CRT_SECURE_NO_WARNINGS
#define PI 3.141592 // PI๋ฅผ 3.141592๋กœ ์ •์˜
#define AREA_RECT(w,h) ((w)*(h))
#define AREA_CIRCLE(r) ((r)*PI)
#include <stdio.h>
int main(void) {
	int i;
	int w, h, r;

	// ๋ฌดํ•œ ๋ฃจํ”„
	for (;;) {
		printf("๋„ํ˜•์˜ ์ข…๋ฅ˜(1.์ง์‚ฌ๊ฐํ˜•  2.์›  0.์ข…๋ฃŒ)? ");
		scanf("%d", &i);

		// 0์ด ์ž…๋ ฅ๋˜๋ฉด ๋ฌดํ•œ ๋ฃจํ”„๋ฅผ ๋น ์ ธ๋‚˜๊ฐ
		if (i == 0) {
			printf("ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.\n");
			break;
		}
		// 1์ด ์ž…๋ ฅ๋˜๋ฉด AREA_RECT ๋งคํฌ๋กœ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰
		if (i == 1) {
			printf("๊ฐ€๋กœ ์„ธ๋กœ? ");
			scanf("%d %d", &w, &h);
			printf("๋ฉด์ : %d\n", AREA_RECT(w, h));
		}
		// 2๊ฐ€ ์ž…๋ ฅ๋˜๋ฉด AREA_CIRCLE ๋งคํฌ๋กœ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰
		if (i == 2) {
			printf("๋ฐ˜์ง€๋ฆ„? ");
			scanf("%d", &r);
			printf("๋ฉด์ : %lf\n", AREA_CIRCLE(r));
		}
		// 2๋ณด๋‹ค ํฐ ๊ฐ’์ด ๋“ค์–ด์˜ค๋ฉด ์‹คํ–‰
		else if (i > 2) {
			printf("0~2 ์‚ฌ์ด์˜ ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”!!\n");
		}
	}
}
[์‹คํ–‰ ๊ฒฐ๊ณผ]

๋„ํ˜•์˜ ์ข…๋ฅ˜(1.์ง์‚ฌ๊ฐํ˜•  2.์›  0.์ข…๋ฃŒ)? 1
๊ฐ€๋กœ ์„ธ๋กœ? 10 30
๋ฉด์ : 300
๋„ํ˜•์˜ ์ข…๋ฅ˜(1.์ง์‚ฌ๊ฐํ˜•  2.์›  0.์ข…๋ฃŒ)? 2
๋ฐ˜์ง€๋ฆ„? 100
๋ฉด์ : 314.159200
๋„ํ˜•์˜ ์ข…๋ฅ˜(1.์ง์‚ฌ๊ฐํ˜•  2.์›  0.์ข…๋ฃŒ)? 0
ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.
  • 5๋ฒˆ ๋ฌธ์ œ

RGB ๊ฐ’์„ ์ž…๋ ฅ๋ฐ›์•„์„œ ๊ฐ๊ฐ์˜ Red, Green, Blue์˜ ๊ฐ’์„ ์ถ”์ถœํ•˜๋Š” ํ•จ์ˆ˜ ํ”„๋กœ๊ทธ๋žจ

typedef unsigned char BYTE;
#define _CRT_SECURE_NO_WARNINGS
// ์‰ฌํ”„ํŠธ ์—ฐ์‚ฐ์œผ๋กœ RGB๊ฐ’ ์ถ”์ถœ
#define GET_RED(color) (BYTE)((color)>>16)
#define GET_GREEN(color) (BYTE)((color)>>8)
#define GET_BLUE(color) (BYTE)(color)
#include <stdio.h>
int main(void) {
	int color;

	printf("RGB ์ƒ‰์ƒ(0x123456์œผ๋กœ ์ž…๋ ฅ)? ");
	scanf("%i", &color);
	printf("RGB %X์˜ Red: %d, Green: %d, Blue: %d\n", color, GET_RED(color), GET_GREEN(color), GET_BLUE(color));
}
[์‹คํ–‰ ๊ฒฐ๊ณผ]

RGB ์ƒ‰์ƒ(0x123456์œผ๋กœ ์ž…๋ ฅ)? 0xff0080
RGB FF0080์˜ Red: 255, Green: 0, Blue: 128
  • 6๋ฒˆ ๋ฌธ์ œ

RGB ๊ฐ’์„ ์ž…๋ ฅ๋ฐ›์•„ RGB ๊ฐ’์˜ ๋ณด์ƒ‰์„ ๊ตฌํ•˜๋Š” ๋งคํฌ๋กœ ํ•จ์ˆ˜ ํ”„๋กœ๊ทธ๋žจ

typedef unsigned char BYTE;
#define _CRT_SECURE_NO_WARNINGS
// ์‰ฌํ”„ํŠธ ์—ฐ์‚ฐ์œผ๋กœ RGB๊ฐ’ ์ถ”์ถœ
#define GET_RED(color) (BYTE)((color)>>16)
#define GET_GREEN(color) (BYTE)((color)>>8)
#define GET_BLUE(color) (BYTE)(color)
// r,g,b๊ฐ’์˜ ๋ณด์ƒ‰์„ ์ž…๋ ฅ๋ฐ›์•„ ๋น„ํŠธ ์—ฐ์‚ฐ์œผ๋กœ RGB๊ฐ’ ์ƒ์„ฑ
#define MAKE_RGB(r,g,b) ((BYTE)(r) << 16) | ((BYTE)(g) << 8) | (BYTE)(b)
#include <stdio.h>
int main(void) {
	int color;
	int r, g, b;

	printf("RGB ์ƒ‰์ƒ(0x123456์œผ๋กœ ์ž…๋ ฅ)? ");
	scanf("%i", &color);

	// 255์— r,g,b๊ฐ’์„ ๋นผ์„œ ๋ณด์ƒ‰์„ ๊ตฌํ•œ๋‹ค.
	r = 255 - GET_RED(color);
	g = 255 - GET_GREEN(color);
	b = 255 - GET_BLUE(color);

	// %06X๋ฅผ ์‚ฌ์šฉํ•ด Red์˜ ๋ณด์ƒ‰์ด 00 ์ด๋ผ๋„ ์ถœ๋ ฅ์ด ๋‚˜์˜ค๊ฒŒ ํ•œ๋‹ค.
	printf("RGB %X์˜ ๋ณด์ƒ‰: %06X", color, MAKE_RGB(r,g,b));
}
[์‹คํ–‰ ๊ฒฐ๊ณผ]

RGB ์ƒ‰์ƒ(0x123456์œผ๋กœ ์ž…๋ ฅ)? 0xff0080
RGB FF0080์˜ ๋ณด์ƒ‰: 00FF7F
  • 7๋ฒˆ ๋ฌธ์ œ

๋ช…๋ น ํ”„๋กฌํ”„ํŠธ์—์„œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๊ณ„์‚ฐ๊ธฐ ํ”„๋กœ๊ทธ๋žจ

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>// Argc, Argv, atoi()ํ•จ์ˆ˜
int main(int argc, char* argv[]) {
	char ch = *argv[2];
	// ๋ฌธ์žํ˜•์„ ์ •์ˆ˜ํ˜•์œผ๋กœ ๋ณ€ํ™˜ argv[0] = C:\User\0083>C:\Users\0083\source\repos\Project\Debug\000.exe
	int num1 = atoi(argv[1]);
	int num2 = atoi(argv[3]);

	switch (ch) {
	case'+':
		printf("%d + %d = %d\n", num1, num2, num1 + num2);
		break;
	case'-':
		printf("%d - %d = %d\n", num1, num2, num1 - num2);
		break;
	case'*':
		printf("%d * %d = %d\n", num1, num2, num1 * num2);
		break;
	case'/':
		if (num1 == 0) {
			printf("0์„ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅ ํ•ฉ๋‹ˆ๋‹ค.\n");
			break;
		}
		else {
			printf("%d / %d = %d\n", num1, num2, num1 / num2);
			break;
		}
	case'%':
		printf("%d %% %d = %d\n", num1, num2, num1 % num2);
		break;
	default:
		printf("์˜ฌ๋ฐ”๋ฅธ ์ˆ˜์‹์„ ์ž…๋ ฅํ•˜์„ธ์š”.\n");
		break;
	}
}
[์‹คํ–‰ ๊ฒฐ๊ณผ]

C:\Users\0083\source\repos\Project\Debug\000.exe 50 + 5
50 + 5 = 55
  • 8๋ฒˆ ๋ฌธ์ œ

๋ช…๋ นํ–‰ ์ธ์ž๋ฅผ ์‚ฌ์šฉํ•ด ํ…์ŠคํŠธ ํŒŒ์ผ์˜ ๋‚ด์šฉ์„ ์ค„ ๋ฒˆํ˜ธ์™€ ํ•จ๊ป˜ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ

README.txt

This is text file for input test.
This file contains multiple lines of text.
The program displays the content of file with line number.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>// strlen() ํ•จ์ˆ˜
#include <stdlib.h>// Argc,Argv
#define SIZE 300

int main(int argc, char** argv) {
	const char* text_filename = argv[1];
	char text_contents[SIZE];
	int count = 1;

	FILE* fp = fopen(text_filename, "rt");

	// ํŒŒ์ผ์„ ์ฐพ์ง€๋ชปํ•˜๋ฉด ํŒŒ์ผ์„ ๋‹ซ๊ณ  ์ข…๋ฃŒ
	if (fp == NULL) {
		printf("Not Found Error! %s\n", argv[1]);
		exit(1);
	}

	while (!feof(fp)) {
		// fgetsํ•จ์ˆ˜๋Š” ๊ฐœํ–‰๋ฌธ์ž(\n)๊นŒ์ง€ ๋ฐ›๋Š”๋‹ค ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๊ฐœํ–‰๋ฌธ์ž๋ฅผ NUL(\0)๋กœ ๋ณ€๊ฒฝ
		fgets(text_contents, SIZE, fp);
		if (text_contents[strlen(text_contents) - 1] == '\n')
			text_contents[strlen(text_contents) - 1] = '\0';
		printf("%3d: ", count); // ๋ผ์ธ ๋ฒˆํ˜ธ ์ถœ๋ ฅ;
		puts(text_contents);
		count++;
	}
	fclose(fp);
}
[์‹คํ–‰ ๊ฒฐ๊ณผ]
(๋ฌธ์„œ๊ฐ€ ์ €์žฅ๋œ ์œ„์น˜๋ฅผ ์ž…๋ ฅํ•ด์•ผ ํ•œ๋‹ค.)

C:\Users\0083t>source\repos\p770-8\Debug\p770-8.exe C:\Users\0083t\source\repos\p770-8\README.txt

  1: This is text file for input test.
  2: This file contains multiple lines of text.
  3: The program displays the content of file with line number.
  • 9๋ฒˆ ๋ฌธ์ œ

๋‘ ์ ์˜ ์ขŒํ‘œ๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ๋‘ ์ ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๊ณ  ์กฐ๊ฑด๋ถ€ ์ปดํŒŒ์ผ์„ ์‚ฌ์šฉํ•ด ์‹ค์ˆ˜ํ˜• ์ขŒํ‘œ์™€ ์ •์ˆ˜ํ˜• ์ขŒํ‘œ๋ฅผ ์ž…๋ ฅ ๊ฐ€๋Šฅํ•œ ํ”„๋กœ๊ทธ๋žจ

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h> // pow() ์ง€์ˆ˜ ํ•จ์ˆ˜, sqrt() ๋ฃจํŠธ ํ•จ์ˆ˜

struct POINT {
	double x;
	double y;
};
// KEY์˜ ๊ฐ’์ด 0์ผ ๊ฒฝ์šฐ์—๋Š” ์ •์ˆ˜ํ˜• ์ขŒํ‘œ ๋‚˜๋จธ์ง€๋Š” ์‹ค์ˆ˜ํ˜• ์ขŒํ‘œ
#define KEY 1

void print_point(void) {
	printf("์ ์˜ ์ขŒํ‘œ? ");
}
double set_point(double* x, double* y) {
	return scanf("%lf %lf", x, y);
}
double get_length(double x1, double y1, double x2, double y2) {
	// ์ขŒํ‘œํ‰๋ฉด ์œ„์˜ ๋‘ ์ ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ๋Š” (xy3)^2 = (xy1)^2 + (xy2)^2
	return sqrt(pow(x2 - x1, 2) + pow(y2 - y1, 2));
}
int main(void) {
	struct POINT P[2] = {};

#if(KEY == 0)

	for (int i = 0; i < 2; i++) {
		print_point();
		set_point(&P[i].x, &P[i].y);
	}

	printf("(%.0f,%.0f)๊ณผ (%.0f,%.0f)์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ: %f", P[0].x, P[0].y, P[1].x, P[1].y, get_length(P[0].x, P[0].y, P[1].x, P[1].y));
#else

	for (int i = 0; i < 2; i++) {
		print_point();
		set_point(&P[i].x, &P[i].y);
	}

	printf("(%.2f,%.2f)๊ณผ (%.2f,%.2f)์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ: %f", P[0].x, P[0].y, P[1].x, P[1].y, get_length(P[0].x, P[0].y, P[1].x, P[1].y));
#endif
	return 0;
}
[์ •์ˆ˜ํ˜• ์ขŒํ‘œ ์‹คํ–‰ ๊ฒฐ๊ณผ]

์ ์˜ ์ขŒํ‘œ? 3 4
์ ์˜ ์ขŒํ‘œ? 0 0
(3,4)๊ณผ (0,0)์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ: 5.000000
[์‹ค์ˆ˜ํ˜• ์ขŒํ‘œ ์‹คํ–‰ ๊ฒฐ๊ณผ]

์ ์˜ ์ขŒํ‘œ? 2.1 3.4
์ ์˜ ์ขŒํ‘œ? 0.1 4.5
(2.10,3.40)๊ณผ (0.10,4.50)์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ: 2.282542
  • 10๋ฒˆ ๋ฌธ์ œ

9๋ฒˆ ๋ฌธ์ œ์˜ ํ”„๋กœ๊ทธ๋žจ์„ ๋ถ„ํ•  ์ปดํŒŒ์ผ

[myheader.h]

#pragma once

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h> // pow() ์ง€์ˆ˜ ํ•จ์ˆ˜, sqrt() ๋ฃจํŠธ ํ•จ์ˆ˜

struct POINT {
	double x;
	double y;
};

void print_point(void);
double set_point(double* x, double* y);
double get_length(double x1, double y1, double x2, double y2);

// KEY์˜ ๊ฐ’์ด 0์ผ ๊ฒฝ์šฐ์—๋Š” ์ •์ˆ˜ํ˜• ์ขŒํ‘œ ๋‚˜๋จธ์ง€๋Š” ์‹ค์ˆ˜ํ˜• ์ขŒํ‘œ
#define KEY 1
[point.cpp]

#include "myheader.h"

void print_point(void) {
	printf("์ ์˜ ์ขŒํ‘œ? ");
}
double set_point(double* x, double* y) {
	return scanf("%lf %lf", x, y);
}
double get_length(double x1, double y1, double x2, double y2) {
	// ์ขŒํ‘œํ‰๋ฉด ์œ„์˜ ๋‘ ์ ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ๋Š” (xy3)^2 = (xy1)^2 + (xy2)^2
	return sqrt(pow(x2 - x1, 2) + pow(y2 - y1, 2));
}
[main.cpp]

#include "myheader.h"

int main(void) {
	struct POINT P[2] = {};

#if(KEY == 0)

	for (int i = 0; i < 2; i++) {
		print_point();
		set_point(&P[i].x, &P[i].y);
	}

	printf("(%.0f,%.0f)๊ณผ (%.0f,%.0f)์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ: %f", P[0].x, P[0].y, P[1].x, P[1].y, get_length(P[0].x, P[0].y, P[1].x, P[1].y));
#else

	for (int i = 0; i < 2; i++) {
		print_point();
		set_point(&P[i].x, &P[i].y);
	}

	printf("(%.2f,%.2f)๊ณผ (%.2f,%.2f)์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ: %f", P[0].x, P[0].y, P[1].x, P[1].y, get_length(P[0].x, P[0].y, P[1].x, P[1].y));
#endif
	return 0;
}
[์‹ค์ˆ˜ ์ขŒํ‘œ ์‹คํ–‰ ๊ฒฐ๊ณผ]

์ ์˜ ์ขŒํ‘œ? 1.1 2.2
์ ์˜ ์ขŒํ‘œ? 3.3 4.4
(1.10,2.20)๊ณผ (3.30,4.40)์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ: 3.111270
[์ •์ˆ˜ ์ขŒํ‘œ ์‹คํ–‰ ๊ฒฐ๊ณผ]

์ ์˜ ์ขŒํ‘œ? 1 2
์ ์˜ ์ขŒํ‘œ? 3 4
(1,2)๊ณผ (3,4)์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ: 2.828427
  • 11๋ฒˆ ๋ฌธ์ œ

๋…„, ์›”, ์ผ DATE ๊ตฌ์กฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•ด ์˜ค๋Š˜์˜ ๋‚ ์งœ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ•จ์ˆ˜, ์ž…๋ ฅ๋ฐ›์€ ๋‚ ์งœ๊ฐ€ ๊ณตํœด์ผ์ธ์ง€ ๋น„๊ตํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค๊ณ  ์กฐ๊ฑด๋ถ€ ์ปดํŒŒ์ผ์„ ์‚ฌ์šฉํ•ด ์˜ค๋Š˜์˜ ๋‚ ์งœ, ๋น„๊ต ํ•จ์ˆ˜๋ฅผ ์„ ํƒํ•˜๊ณ  ์ถœ๋ ฅ ๋ฐฉ์‹๋„ Jan 1 2019 ๋˜๋Š” 2019 1 1 ๋‘๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ์„ ํƒ ๊ฐ€๋Šฅํ•œ ํ”„๋กœ๊ทธ๋žจ

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <time.h> //time()ํ•จ์ˆ˜ 

// 1 == yes || 0 == no
#define USE_USA_FORMAT 0

// 1 == set_as_today || 0 == is_same_date
#define TODAY_OR_SAME_DAY 0

struct DATE {
	int year;
	int month;
	int date;
};

// ์˜ค๋Š˜์˜ ๋‚ ์งœ๋ฅผ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜
struct DATE set_as_today(void) {
	time_t t = time(NULL);
	struct tm* today = localtime(&t);
	struct DATE ti;
	ti.year = today->tm_year + 1900;
	ti.month = today->tm_mon + 1;
	ti.date = today->tm_mday;
	return ti;
}

// ๋‹ฌ์„ ์˜๋ฌธ์œผ๋กœ ์ถœ๋ ฅํ•˜๋Š” ํ•จ์ˆ˜
void printf_date_USA(struct DATE ti) {
	char month[12][5]{
		"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sept","Oct","Nov","Dec"
	};
	for (size_t i = 0; i < 12; i++) {
		if (ti.month == i + 1) {
			printf("%s %d %d", month[i], ti.date, ti.year);
		}
	}
}

// ์ž…๋ ฅ๋ฐ›์€ ๋‚ ์งœ์™€ ์ €์žฅ ๋˜์–ด์žˆ๋Š” ๋‚ ์งœ๋ฅผ ๋น„๊ตํ•˜๋Š” ํ•จ์ˆ˜
void is_same_date(struct DATE hld, struct DATE input) {
	// USE_USA_FORMAT == 0 ์ด๋ฉด ์ˆซ์ž๋กœ ๋…„ ์›” ๋‹ฌ ์ถœ๋ ฅ
#if(USE_USA_FORMAT == 0)
	if ((hld.year == input.year) && (hld.month == input.month) && (hld.date == input.date)) {
		printf("%d/%d/%d์€ ๊ณตํœด์ผ ์ž…๋‹ˆ๋‹ค.\n", input.year, input.month, input.date);
	}
	else printf("%d/%d/%d์€ ๊ณตํœด์ผ์ด ์•„๋‹™๋‹ˆ๋‹ค.\n", input.year, input.month, input.date);
#endif
	// USE_USA_FORMAT == 1 ์ด๋ฉด ๋‹ฌ์„ ์˜๋ฌธ์œผ๋กœ ์ถœ๋ ฅ
# if(USE_USA_FORMAT == 1)
	if ((hld.year == input.year) && (hld.month == input.month) && (hld.date == input.date)) {
		printf_date_USA(input);
		printf("์€ ๊ณตํœด์ผ ์ž…๋‹ˆ๋‹ค.\n");
	}
	else {
		printf_date_USA(input);
		printf("์€ ๊ณตํœด์ผ์ด ์•„๋‹™๋‹ˆ๋‹ค.\n");
	}
#endif
}

int main(void) {
	struct DATE hld[2] = { 2019,1,1 }; // ๊ณตํœด์ผ ์„ค์ •
	struct DATE input;
	struct DATE ti;

	// TODAY_OR_SAME_DAY == 1 ์ผ๋•Œ ์˜ค๋Š˜ ๋‚ ์งœ๋ฅผ ์ถœ๋ ฅ USE_USA_FORMAT == 1 ์ด๋ฉด ๋‹ฌ์„ ์˜๋ฌธ, 0 ์ผ๋•Œ๋Š” ์ˆซ์ž
#if(TODAY_OR_SAME_DAY == 1)
	ti = set_as_today();

#if(USE_USA_FORMAT == 1)
	printf("Today is ");
	printf_date_USA(ti);
#else
	printf("์˜ค๋Š˜์€ %d/%d/%d ์ž…๋‹ˆ๋‹ค.\n", ti.year, ti.month, ti.date);
#endif
#endif

	// TODAY_OR_SAME_DAY == 0 ์ผ๋•Œ ๋‚ ์งœ๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ๋น„๊ต USE_USA_FORMAT == 1 ์ด๋ฉด ๋‹ฌ์„ ์˜๋ฌธ, 0 ์ผ๋•Œ๋Š” ์ˆซ์ž
#if(TODAY_OR_SAME_DAY == 0)
	for (;;) {
		printf("๋‚ ์งœ(์—ฐ ์›” ์ผ)? ");
		scanf("%d %d %d", &input.year, &input.month, &input.date);
		if ((input.year == 0) && (input.month == 0) && (input.date == 0)) {
			break;
		}
		is_same_date(*hld, input);
	}
#endif
}
[์‹คํ–‰ ๊ฒฐ๊ณผ]

[USE_USA_FORMAT 0]
[TODAY_OR_SAME_DAY 0]

๋‚ ์งœ(์—ฐ ์›” ์ผ)? 2019 1 1
2019/1/1์€ ๊ณตํœด์ผ ์ž…๋‹ˆ๋‹ค.
๋‚ ์งœ(์—ฐ ์›” ์ผ)? 2019 1 2
2019/1/2์€ ๊ณตํœด์ผ์ด ์•„๋‹™๋‹ˆ๋‹ค.
๋‚ ์งœ(์—ฐ ์›” ์ผ)? 0 0 0
[์‹คํ–‰ ๊ฒฐ๊ณผ]

[USE_USA_FORMAT 1]
[TODAY_OR_SAME_DAY 0]

๋‚ ์งœ(์—ฐ ์›” ์ผ)? 2019 1 1
Jan 1 2019์€ ๊ณตํœด์ผ ์ž…๋‹ˆ๋‹ค.
๋‚ ์งœ(์—ฐ ์›” ์ผ)? 2019 1 2
Jan 2 2019์€ ๊ณตํœด์ผ์ด ์•„๋‹™๋‹ˆ๋‹ค.
๋‚ ์งœ(์—ฐ ์›” ์ผ)? 0 0 0
[์‹คํ–‰ ๊ฒฐ๊ณผ]

[USE_USA_FORMAT 0]
[TODAY_OR_SAME_DAY 1]

์˜ค๋Š˜์€ 2019/10/27 ์ž…๋‹ˆ๋‹ค.
[์‹คํ–‰ ๊ฒฐ๊ณผ]

[USE_USA_FORMAT 1]
[TODAY_OR_SAME_DAY 1]

Today is Oct 27 2019
  • 12๋ฒˆ ๋ฌธ์ œ

11๋ฒˆ ๋ฌธ์ œ์˜ ํ”„๋กœ๊ทธ๋žจ์„ ๋ถ„ํ•  ์ปดํŒŒ์ผ

[myheader.h]

#pragma once
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <time.h> //time()ํ•จ์ˆ˜ 

// 1 == yes || 0 == no
#define USE_USA_FORMAT 0

// 1 == set_as_today || 0 == is_same_date
#define TODAY_OR_SAME_DAY 0

struct DATE {
	int year;
	int month;
	int date;
};

struct DATE set_as_today(void);
void printf_date_USA(struct DATE);
void is_same_date(struct DATE, struct DATE);
[date.cpp]

#include "myheader.h"

// ์˜ค๋Š˜์˜ ๋‚ ์งœ๋ฅผ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜
struct DATE set_as_today(void) {
	time_t t = time(NULL);
	struct tm* today = localtime(&t);
	struct DATE ti;
	ti.year = today->tm_year + 1900;
	ti.month = today->tm_mon + 1;
	ti.date = today->tm_mday;
	return ti;
}

// ๋‹ฌ์„ ์˜๋ฌธ์œผ๋กœ ์ถœ๋ ฅํ•˜๋Š” ํ•จ์ˆ˜
void printf_date_USA(struct DATE ti) {
	char month[12][5]{
		"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sept","Oct","Nov","Dec"
	};
	for (size_t i = 0; i < 12; i++) {
		if (ti.month == i + 1) {
			printf("%s %d %d", month[i], ti.date, ti.year);
		}
	}
}

// ์ž…๋ ฅ๋ฐ›์€ ๋‚ ์งœ์™€ ์ €์žฅ ๋˜์–ด์žˆ๋Š” ๋‚ ์งœ๋ฅผ ๋น„๊ตํ•˜๋Š” ํ•จ์ˆ˜
void is_same_date(struct DATE hld, struct DATE input) {
	// USE_USA_FORMAT == 0 ์ด๋ฉด ์ˆซ์ž๋กœ ๋…„ ์›” ๋‹ฌ ์ถœ๋ ฅ
#if(USE_USA_FORMAT == 0)
	if ((hld.year == input.year) && (hld.month == input.month) && (hld.date == input.date)) {
		printf("%d/%d/%d์€ ๊ณตํœด์ผ ์ž…๋‹ˆ๋‹ค.\n", input.year, input.month, input.date);
	}
	else printf("%d/%d/%d์€ ๊ณตํœด์ผ์ด ์•„๋‹™๋‹ˆ๋‹ค.\n", input.year, input.month, input.date);
#endif
	// USE_USA_FORMAT == 1 ์ด๋ฉด ๋‹ฌ์„ ์˜๋ฌธ์œผ๋กœ ์ถœ๋ ฅ
# if(USE_USA_FORMAT == 1)
	if ((hld.year == input.year) && (hld.month == input.month) && (hld.date == input.date)) {
		printf_date_USA(input);
		printf("์€ ๊ณตํœด์ผ ์ž…๋‹ˆ๋‹ค.\n");
	}
	else {
		printf_date_USA(input);
		printf("์€ ๊ณตํœด์ผ์ด ์•„๋‹™๋‹ˆ๋‹ค.\n");
	}
#endif
}
[main.cpp]

#include "myheader.h"

int main(void) {
	struct DATE hld[2] = { 2019,1,1 }; // ๊ณตํœด์ผ ์„ค์ •
	struct DATE input;
	struct DATE ti;

	// TODAY_OR_SAME_DAY == 1 ์ผ๋•Œ ์˜ค๋Š˜ ๋‚ ์งœ๋ฅผ ์ถœ๋ ฅ USE_USA_FORMAT == 1 ์ด๋ฉด ๋‹ฌ์„ ์˜๋ฌธ, 0 ์ผ๋•Œ๋Š” ์ˆซ์ž
#if(TODAY_OR_SAME_DAY == 1)
	ti = set_as_today();

#if(USE_USA_FORMAT == 1)
	printf("Today is ");
	printf_date_USA(ti);
#else
	printf("์˜ค๋Š˜์€ %d/%d/%d ์ž…๋‹ˆ๋‹ค.\n", ti.year, ti.month, ti.date);
#endif
#endif

	// TODAY_OR_SAME_DAY == 0 ์ผ๋•Œ ๋‚ ์งœ๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ๋น„๊ต USE_USA_FORMAT == 1 ์ด๋ฉด ๋‹ฌ์„ ์˜๋ฌธ, 0 ์ผ๋•Œ๋Š” ์ˆซ์ž
#if(TODAY_OR_SAME_DAY == 0)
	for (;;) {
		printf("๋‚ ์งœ(์—ฐ ์›” ์ผ)? ");
		scanf("%d %d %d", &input.year, &input.month, &input.date);
		if ((input.year == 0) && (input.month == 0) && (input.date == 0)) {
			break;
		}
		is_same_date(*hld, input);
	}
#endif
}
[์‹คํ–‰ ๊ฒฐ๊ณผ]

[USE_USA_FORMAT 0]
[TODAY_OR_SAME_DAY 0]

๋‚ ์งœ(์—ฐ ์›” ์ผ)? 2019 1 1
2019/1/1์€ ๊ณตํœด์ผ ์ž…๋‹ˆ๋‹ค.
๋‚ ์งœ(์—ฐ ์›” ์ผ)? 2019 1 5
2019/1/5์€ ๊ณตํœด์ผ์ด ์•„๋‹™๋‹ˆ๋‹ค.
๋‚ ์งœ(์—ฐ ์›” ์ผ)? 0 0 0
[์‹คํ–‰ ๊ฒฐ๊ณผ]

[USE_USA_FORMAT 1]
[TODAY_OR_SAME_DAY 0]

๋‚ ์งœ(์—ฐ ์›” ์ผ)? 2019 1 1
Jan 1 2019์€ ๊ณตํœด์ผ ์ž…๋‹ˆ๋‹ค.
๋‚ ์งœ(์—ฐ ์›” ์ผ)? 2019 1 7
Jan 7 2019์€ ๊ณตํœด์ผ์ด ์•„๋‹™๋‹ˆ๋‹ค.
๋‚ ์งœ(์—ฐ ์›” ์ผ)? 0 0 0
[์‹คํ–‰ ๊ฒฐ๊ณผ]

[USE_USA_FORMAT 0]
[TODAY_OR_SAME_DAY 1]

์˜ค๋Š˜์€ 2019/10/27 ์ž…๋‹ˆ๋‹ค.
[์‹คํ–‰ ๊ฒฐ๊ณผ]

[USE_USA_FORMAT 1]
[TODAY_OR_SAME_DAY 1]

Today is Oct 27 2019
โš ๏ธ **GitHub.com Fallback** โš ๏ธ