1ν•™λ…„ (2023)/C μ–Έμ–΄

[C] Study: λ³€μˆ˜μ™€ μžλ£Œν˜• - (5) λ¬Έμžν˜•

waterproof 2023. 8. 18. 13:29

 

 

 

 


 λ¬ΈμžλŠ” μ»΄ν“¨ν„°μ—μ„œ μ–΄λ–»κ²Œ ν‘œν˜„λ κΉŒ? μ»΄ν“¨ν„°λŠ” λͺ¨λ“  것을 숫자둜 ν‘œν˜„ν•œλ‹€. λ¬Έμžλ„ μ˜ˆμ™ΈλŠ” μ•„λ‹ˆλ‹€.

 

 μ˜ˆλ₯Ό λ“€λ©΄ 'A'λŠ” 숫자 65둜, 'B'λŠ” 66으둜 ν‘œν˜„ν•œλ‹€, 이것을 문자 μ½”λ“œλΌκ³  ν•œλ‹€.

 

 λ„λ¦¬ μ‚¬μš©ν•˜λŠ” ν‘œμ€€μ μΈ 문자 μ½”λ“œλŠ” μ•„μŠ€ν‚€ μ½”λ“œ(ASCII code)이닀.

 

 μ•„μŠ€ν‚€ μ½”λ“œλŠ” μ˜μ–΄μ˜ λŒ€μ†Œλ¬Έμž, 숫자, κΈ°ν˜Έλ“€μ— λŒ€ν•˜μ—¬ 0μ—μ„œ 127 μ‚¬μ΄μ˜ 값듀을 λΆ€μ—¬ν•œλ‹€.

 

 Cμ–Έμ–΄μ—μ„œλ„ ASCII μ½”λ“œλ₯Ό μ΄μš©ν•˜μ—¬ 문자λ₯Ό ν‘œν˜„ν•˜κ²Œ λœλ‹€.

 

 μ˜λ¬Έμžμ˜ 경우, κΈ€μžλ“€μ˜ κ°œμˆ˜κ°€ 128개 μ΄ν•˜μ΄κΈ° λ•Œλ¬Έμ— ν•˜λ‚˜μ˜ κΈ€μžμ— λŒ€ν•˜μ—¬ λ§Žμ€ λΉ„νŠΈλ₯Ό ν• λ‹Ήν•  ν•„μš”λŠ” μ—†λ‹€, 8λΉ„νŠΈλ©΄ μΆ©λΆ„ν•˜λ‹€.

 

 μ•„μŠ€ν‚€ μ½”λ“œλŠ” 8λΉ„νŠΈμ˜ charν˜• λ³€μˆ˜μ— μ €μž₯될 수 μžˆλ‹€.

 

μ•„μŠ€ν‚€ μ½”λ“œμ—μ„œ 인쇄 κ°€λŠ₯ν•œ μ½”λ“œλŠ” 슀페이슀 λ¬ΈμžλΆ€ν„° μ‹œμž‘ν•œλ‹€. 슀페이슀(space) λ¬ΈμžλŠ” 32둜 ν‘œν˜„λœλ‹€. λŠλ‚Œν‘œ 문자(!)의 μ½”λ“œλŠ” 33이닀. 이런 μ‹μœΌλ‘œ 1μ”© μ¦κ°€ν•˜λ©΄μ„œ μ•ŒνŒŒλ²³ λ¬Έμžλ“€μ„ μ°¨λ‘€λŒ€λ‘œ ν‘œν˜„ν•œλ‹€.

 

'A'의 μ½”λ“œλŠ” 65이고, 'B'λŠ” 66이닀. 'a'λŠ” 97이고 'b'λŠ” 98이닀.

 

μ•„μŠ€ν‚€ μ½”λ“œν‘œ

 

μ°Έκ³ 

charν˜•μ΄ λ‚΄λΆ€μ μœΌλ‘œλŠ” μ •μˆ˜λ₯Ό μ €μž₯ν•˜κΈ° λ•Œλ¬Έμ— 기술적으둜 보면 μ •μˆ˜ν˜•μ΄λΌκ³  말할 μˆ˜λ„ μžˆλ‹€. κ·ΈλŸ¬λ‚˜ charλΌλŠ” 단어가 뢙은 κ²ƒμ²˜λŸΌ charν˜•μ€ 문자λ₯Ό μ €μž₯ν•˜κΈ° μœ„ν•˜μ—¬ λ§Œλ“€μ–΄μ‘ŒκΈ° λ•Œλ¬Έμ— λ¬Έμžν˜•μœΌλ‘œ μ†Œκ°œν•˜μ˜€λ‹€.

 

 

 

 


문자 λ³€μˆ˜μ™€ 문자 μƒμˆ˜

 

 λ¬Έμžκ°€ μ •μˆ˜λ‘œ ν‘œν˜„λ˜λ―€λ‘œ μ •μˆ˜λ₯Ό μ €μž₯ν•  수 μžˆλŠ” μžλ£Œν˜•μ€ λ¬Έμžλ„ μ €μž₯ν•  수 μžˆλ‹€.

 

 μ•„μŠ€ν‚€ μ½”λ“œκ°€ 0μ—μ„œ 127κΉŒμ§€μ˜ μˆ«μžλ§Œμ„ μ΄μš©ν•˜λ―€λ‘œ 8λΉ„νŠΈλ‘œ μΆ©λΆ„νžˆ ν‘œν˜„μ΄ κ°€λŠ₯ν•˜λ‹€. (8λΉ„νŠΈμ΄λ©΄ 2^8(256)개의 λ¬ΈμžκΉŒμ§€ λ‚˜νƒ€λ‚Ό 수 μžˆλ‹€).

 

 λ”°λΌμ„œ charν˜•μ΄ 문자λ₯Ό μ €μž₯ν•˜λŠ”λ° 주둜 μ‚¬μš©λœλ‹€. charν˜•μ€ 8λΉ„νŠΈ μ •μˆ˜λ₯Ό μ €μž₯ν•  수 μžˆλ‹€.

 

char code;

 

λ§Œμ•½ 이 charν˜•μ˜ λ³€μˆ˜ code에 문자 Aλ₯Ό μ €μž₯ν•˜λ €λ©΄ μ–΄λ–»κ²Œ ν•΄μ•Ό ν• κΉŒ?

 

문자 AλŠ” μ•„μŠ€ν‚€ μ½”λ“œ 65둜 ν‘œν˜„λ˜λ―€λ‘œ code에 65λ₯Ό λŒ€μž…ν•˜λ©΄ 될 것이닀.

 

ν•˜μ§€λ§Œ 숫자λ₯Ό λŒ€μž…ν•˜λŠ” 것보닀 더 νŽΈλ¦¬ν•œ 방법이 μžˆλ‹€. Cμ—μ„œλŠ” 문자 Aλ₯Ό ν‘œν˜„ν•˜λ €λ©΄ μž‘μ€λ”°μ˜΄ν‘œ('')λ₯Ό μ‚¬μš©ν•˜μ—¬ 'A'와 같이 λ‚˜νƒ€λ‚Έλ‹€.

 

code = 'A';

 

 'A'와 같이 μž‘μ€λ”°μ˜΄ν‘œλ‘œ 감싸진 문자λ₯Ό 문자 μƒμˆ˜(character constant)라고 ν•œλ‹€.

 

 μ»΄νŒŒμΌλŸ¬λŠ” μž‘μ€λ”°μ˜΄ν‘œλ‘œ 감싸진 문자 μƒμˆ˜λ₯Ό λ§Œλ‚˜λ©΄ 이것을 μ•„μŠ€ν‚€ μ½”λ“œλ‘œ λ³€ν™˜ν•œλ‹€.

 

 μ‹€μ œλ‘œ codeλ₯Ό μ‹­μ§„μˆ˜ ν˜•μ‹μœΌλ‘œ 좜λ ₯ν•˜μ—¬ 보면 65κ°€ 좜λ ₯됨을 확인할 수 μžˆλ‹€.

 

λ¬Έμžν˜•μ˜ λ³€μˆ˜μ— 문자 μƒμˆ˜λ₯Ό λŒ€μž…ν•˜λ©΄ μ•„μŠ€ν‚€ μ½”λ“œκ°€ μ €μž₯λœλ‹€.

 

 λ¬Έμžλ₯Ό μž…μΆœλ ₯ν•˜λŠ” 방법은 λ§Žλ‹€. scanf()λ₯Ό ν˜•μ‹ μ§€μ •μž %c둜 ν˜ΈμΆœν•΄λ„ 되고 getchar()λΌλŠ” μ „μš© ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄λ„ λœλ‹€.

 

 getchar() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬, 문자 'A'의 μ•„μŠ€ν‚€ μ½”λ“œλ₯Ό 좜λ ₯ν•œ 후에, μ‚¬μš©μžλ‘œλΆ€ν„° 문자λ₯Ό λ°›μ•„μ„œ κ·Έ 문자의 μ•„μŠ€ν‚€ μ½”λ“œλ₯Ό 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•΄λ³΄μž.

 

#include <stdio.h>

int main(void)
{
	char c;    // λ³€μˆ˜ μ„ μ–Έ
    
	c = 'A';   // λ³€μˆ˜ c에 문자 'A'λ₯Ό μ €μž₯ν•œλ‹€.
	printf("A의 μ•„μŠ€ν‚€ μ½”λ“œ = %d\n", c);    // λ¬Έμžμ™€ μ•„μŠ€ν‚€ μ½”λ“œλ₯Ό 좜λ ₯
    
	printf("문자λ₯Ό μž…λ ₯ν•˜μ‹œμ˜€: ");    // μž…λ ₯ μ•ˆλ‚΄λ¬Έ
	c = getchar();    // scanf("%c", &c)ν•˜μ—¬λ„ λœλ‹€.
    
	printf("%c의 μ•„μŠ€ν‚€ μ½”λ“œ = %d\n", c, c);    // λ¬Έμžμ™€ μ•„μŠ€ν‚€ μ½”λ“œλ₯Ό 좜λ ₯
	return 0;
}

 

 

κ²½κ³ 

λ§Œμ•½ 문자 μƒμˆ˜λ₯Ό μž‘μ€λ”°μ˜΄ν‘œλ₯Ό 쓰지 μ•Šκ³  λ‹€μŒκ³Ό 같이 κΈ°μˆ ν•˜λ©΄ 였λ₯˜μ΄λ‹€.
char code = 'A';​

μ»΄νŒŒμΌλŸ¬λŠ” Aλ₯Ό λ³€μˆ˜ μ΄λ¦„μœΌλ‘œ μƒκ°ν•œλ‹€. μž‘μ€λ”°μ˜΄ν‘œλ₯Ό λΉ λœ¨λ¦¬μ§€ μ•Šλ„λ‘ μ£Όμ˜ν•˜μž.

 

Q λ¬Έμžκ°€ μ •μˆ˜λ‘œ ν‘œν˜„λœλ‹€λ©΄ char ν˜•μ˜ λ³€μˆ˜κ°€ 문자λ₯Ό μ €μž₯ν•˜λŠ”μ§€, μ •μˆ˜λ₯Ό μ €μž₯ν•˜λŠ”μ§€λ₯Ό μ–΄λ–»κ²Œ κ΅¬λ³„ν•˜λŠ”κ°€?
A char ν˜•μ˜ λ³€μˆ˜μ— μ €μž₯된 값을 문자둜 ν•΄μ„œκ°€λ©΄ 문자라고 κ°„μ£Όλœλ‹€. 예λ₯Ό λ“€μ–΄μ„œ 화면에 좜λ ₯ν• λ•Œ %cλ₯Ό μ‚¬μš©ν•˜μ—¬μ„œ 좜λ ₯ν•˜λ©΄ λ³€μˆ˜μ— λ“€μ–΄μžˆλŠ” 값을 μ•„μŠ€ν‚€ μ½”λ“œλ‘œ ν•΄μ„ν•œλ‹€. λ°˜λ©΄μ— %dλ₯Ό μ‚¬μš©ν•˜λ©΄ λ¬Έμžκ°€ μ•„λ‹ˆκ³  μ •μˆ˜λ‘œ ν•΄μ„ν•œλ‹€.

 

 

 

 


μ œμ–΄ 문자

 

 μ œμ–΄ λ¬Έμžλ“€μ€ 인쇄될 μˆ˜κ°€ μ—†κ³  주둜 μ½˜μ†”μ΄λ‚˜ ν”„λ¦°ν„°λ₯Ό μ œμ–΄ν•  λͺ©μ μœΌλ‘œ μ΄μš©λ˜λŠ” λ¬Έμžλ“€μ΄λ‹€.

 

 μ˜ˆλ₯Ό λ“€λ©΄ 화면에 μƒˆλ‘œμš΄ 쀄을 λ§Œλ“œλŠ” μ€„λ°”κΏˆ λ¬Έμžμ™€ 화면에 탭을 λ‚˜νƒ€λ‚΄λŠ” 문자, λ²¨μ†Œλ¦¬λ₯Ό λ‚΄λŠ” 문자, 백슀페이슀 문자 등이 μ œμ–΄ λ¬Έμžμ— ν¬ν•¨λœλ‹€.

 

 μ œμ–΄ λ¬Έμžλ“€μ„ ν”„λ‘œκ·Έλž¨ μ•ˆμ—μ„œ ν‘œν˜„ν•˜λŠ” λͺ‡ κ°€μ§€μ˜ 방법이 μ‘΄μž¬ν•œλ‹€. κ°€μž₯ κ°„λ‹¨ν•œ 방법은 ν•΄λ‹Ή μ•„μŠ€ν‚€ μ½”λ“œ 값을 직접 μ‚¬μš©ν•˜λŠ” 것이닀.

 

 μ˜ˆλ₯Ό λ“€λ©΄ μ»΄ν“¨ν„°μ—μ„œ λ²¨μ†Œλ¦¬λ₯Ό λ°œμƒμ‹œν‚€λŠ” μ œμ–΄ λ¬ΈμžλŠ” μ•„μŠ€ν‚€ μ½”λ“œκ°’μ΄ 7이닀. λ”°λΌμ„œ μ»΄ν“¨ν„°μ—μ„œ "삐"ν•˜λŠ” κ²½κ³  λ²¨μ†Œλ¦¬κ°€ λ‚˜κ²Œ ν•˜λ €λ©΄ λ‹€μŒκ³Ό 같이 ν•˜λ©΄ λœλ‹€. (이 방법은 κ°€μž₯ μ‰¬μš΄ λ°©λ²•μ΄μ§€λ§Œ μ•„μŠ€ν‚€ μ½”λ“œκ°’μ„ μ „λΆ€ μ•”κΈ°ν•˜μ—¬μ•Ό ν•œλ‹€,)

 

printf("%c", 7)

 

더 μ‰¬μš΄ ν•œ 가지 방법은 μ΄μŠ€μΌ€μ΄ν”„ μ‹œν€€μŠ€(escape sequence)을 μ΄μš©ν•΄μ„œ ν‘œν˜„ν•˜λŠ” 방법이닀.

 

μ΄μŠ€μΌ€μ΄ν”„ μ‹œν€€μŠ€λŠ” μ—­μŠ¬λž˜μ‹œ(\)와 의미λ₯Ό λ‚˜νƒ€λ‚΄λŠ” ν•œ κΈ€μžλ₯Ό λΆ™μ—¬μ„œ κΈ°μˆ λœλ‹€.

 

\n λ¬ΈμžλŠ” \와 μ€„λ°”κΏˆ(new line)을 λœ»ν•˜λŠ” n을 λΆ™μ—¬μ„œ \n와 같이 λ‚˜νƒ€λ‚Έλ‹€.

 

μˆ˜ν‰νƒ­μ˜ 경우 \와 νƒ­(tab)을 λ‚˜νƒ€λ‚΄λŠ” tλ₯Ό λΆ™μ—¬μ„œ \t와 같이 λ‚˜νƒ€λ‚Έλ‹€.

 

λ²¨μ†Œλ¦¬λ₯Ό λ‚˜κ²Œν•˜λŠ” μ œμ–΄ λ¬ΈμžλŠ” \a둜 λ‚˜νƒ€λ‚Έλ‹€.

 

 

 μ˜ˆλ₯Ό λ“€μ–΄ ν”„λ‘œκ·Έλž¨μ—μ„œ κ²½κ³ μŒμ„ λ‚΄λ €λ©΄ λ‹€μŒκ³Ό 같이 ν•˜λ©΄ λœλ‹€.

 

printf("\a");

 

μ΄μŠ€μΌ€μ΄ν”„ μ‹œν€€μŠ€λŠ” ν°λ”°μ˜΄ν‘œ 문자λ₯Ό 화면에 λ‚˜νƒ€λ‚΄λŠ” 데에도 μ‚¬μš©λœλ‹€.

 

μ›λž˜ ν°λ”°μ˜΄ν‘œλŠ” λ¬Έμžμ—΄(λ¬Έμžλ“€μ΄ λͺ¨μΈ 것)을 ν‘œμ‹œν•˜λŠ” 역할을 ν•œλ‹€. κ·ΈλŸ¬λ‚˜ λ§Œμ•½ ν°λ”°μ˜΄ν‘œλ₯Ό 화면에 λ‚˜νƒ€λ‚΄μ•Ό ν•  κ²½μš°κ°€ μžˆλ‹€λ©΄ ν°λ”°μ˜΄ν‘œμ˜ 본래의 의미λ₯Ό λ²—μ–΄λ‚˜μ„œ κ·Έλƒ₯ ν•˜λ‚˜μ˜ 문자의 의미λ₯Ό κ°€μ Έμ•Ό ν•  것이닀. μ΄λ•Œ μ΄μŠ€μΌ€μ΄ν”„ μ‹œν€€μŠ€κ°€ μ‚¬μš©λœλ‹€. μ΄λ•Œ μ΄μŠ€μΌ€μ΄ν”„ μ‹œν€€μŠ€κ°€ μ‚¬μš©λœλ‹€

 

νŠΉμˆ˜ν•œ κΈ°λŠ₯을 가진 문자 μ•žμ— μ—­μŠ¬λž˜μ‹œ \λ₯Ό μœ„μΉ˜μ‹œν‚€λ©΄ νŠΉμˆ˜ν•œ μ˜λ―Έκ°€ μ‚¬λΌμ§€λŠ” νš¨κ³Όκ°€ μžˆλ‹€. 

 

λ‹€μŒκ³Ό 같은 라인을 좜λ ₯ν•˜λ €λ©΄

 

"λ‚˜λ§Œμ˜ ν• λ¦¬μš°λ“œ" UCC 열풍

 

λ‹€μŒκ³Ό 같이 ν•˜λ©΄ λœλ‹€.

 

printf(" \"λ‚˜λ§Œμ˜ ν• λ¦¬μš°λ“œ\" UCC 열풍 ");

 

 

βš™οΈ 둜그인 ν™”λ©΄ λ§Œλ“€κΈ°

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
	int id, pass;

	printf("아이디와 νŒ¨μŠ€μ›Œλ“œλ₯Ό 4개의 숫자둜 μž…λ ₯ν•˜μ„Έμš”:");
	printf("id: ____\b\b\b\b");
	scanf("%d", &id);
	printf("pass: ____\b\b\b\b");
	scanf("%d", &pass);
	printf(“\aμž…λ ₯된 μ•„μ΄λ””λŠ” \”%d\”이고 νŒ¨μŠ€μ›Œλ“œλŠ” \”%d\”μž…λ‹ˆλ‹€.", id, pass);
	return 0;
}

 

 

ν”„λ‘œκ·Έλž¨ μ„€λͺ…

κ°„λ‹¨ν•˜κ²Œ 둜그인 화면을 λ§Œλ“€μ–΄ λ³΄μ•˜λ‹€. 사싀 μ•„μ΄λ””λ‚˜ νŒ¨μŠ€μ›Œλ“œλŠ” λ¬Έμžμ—΄λ‘œ λ°›μ•„μ•Ό ν•˜μ§€λ§Œ 아직 문자 배열을 ν•™μŠ΅ν•˜μ§€ μ•Šμ•˜μœΌλ―€λ‘œ μ •μˆ˜λ‘œ λ°›μ•„λ³΄μž

(line 8) \bλŠ” ν™”λ©΄μ˜ 컀슀λ₯Ό λ’€λ‘œ μ›€μ§μ΄λŠ” μ œμ–΄ λ¬Έμžμ΄λ‹€.
(line 12) " 문자λ₯Ό 화면에 ν‘œμ‹œν•˜λ €λ©΄ λ°˜λ“œμ‹œ \" 라고 ν•΄μ•Ό ν•œλ‹€. κ·Έλƒ₯ "라고 ν•˜λ©΄ λ¬Έμžμ—΄μ˜ μ‹œμž‘μ΄λ‚˜ 끝으둜 κ°„μ£Όν•œλ‹€.

 

 

μ°Έκ³ 

특수 문자 ν‘œκΈ° 방법을 μ΄μŠ€μΌ€μ΄ν”„ μ‹œν€€μŠ€λΌκ³  λΆ€λ₯΄λŠ” μ΄μœ λŠ” μ—­μŠ¬λž˜μ‹œ(\)κ°€ λ‹€μŒμ— μ˜€λŠ” 문자의 의미λ₯Ό 본래의 μ˜λ―Έμ—μ„œ νƒˆμΆœν•˜λ„λ‘ ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€. \ λ‹€μŒμ— μ˜€λŠ” λ¬ΈμžλŠ” μ›λž˜μ˜ 의미인 κΈ€μžκ°€ μ•„λ‹Œ νŠΉλ³„ν•œ λͺ…령을 μ˜λ―Έν•œλ‹€.