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