7. Input and Output
7.1. Standard Input and Output
๋ฌธ์ ์คํธ๋ฆผ์ ์ฌ๋ฌ ๊ฐ์ ํ์ผ๋ก ๊ตฌ์ฑ๋๋๋ฐ, ๊ฐ ํ์ ๋์๋ ์ค๋ฐ๊ฟ ๋ฌธ์๊ฐ ์๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํจ์๋ ์ค๋ฐ๊ฟ ๋๋ ๋ฆฌํดํค ๋ฑ์ ์ ์ ํ ๋์ํ๋ ๋์์ ํด์ผ ํ๋ค.
๊ฐ์ฅ ๊ฐ๋จํ ์
๋ ฅ๋ฐฉ๋ฒ์ ๋ณดํต์ ํค๋ณด๋๋ก ํ์ค ์
๋ ฅ์ getchar
๋ฅผ ์ด์ฉํ์ฌ ํ ๋ฒ์ ํ ๋ฌธ์์ฉ ์ฝ์ด ๋ค์ด๋ ๊ฒ์ด๋ค. getchar
๋ ๊ทธ๊ฒ์ด ํธ์ถ๋ ๋๋ง๋ค ๋ค์์ ์
๋ ฅ ๋ฌธ์๋ฅผ ๋๊ฒจ์ฃผ๊ณ ํ์ผ์ ๋์ ๋ง๋๋ฉด EOF๋ผ๋ ๊ฐ์ ๋๊ฒจ์ค๋ค. ์ด ๊ฐ์ ์์๊ณ ๋ณดํต -1์ ๊ฐ์ ๊ฐ์ง์ง๋ง ํ๊ฒฝ์ ๋ฐ๋ผ ๋ค๋ฅด๋ค.
๋๋ถ๋ถ์ ํ๊ฒฝ์์๋ <
๋ฅผ ์ด์ฉํ์ฌ ํค๋ณด๋ ๋์ ์ ํ์ผ์ ์ด์ฉํ ์ ์๊ฒ ํ๋ค. ์๋ฅผ ๋ค์ด prog๋ผ๋ ํ๋ก๊ทธ๋จ ๋ด์์ getchar๊ฐ ์ฌ์ฉ๋์๋ค๋ฉด infile์ด๋ผ๋ ํ์ผ๋ก๋ถํฐ ๋ฌธ์๋ฅผ ์ฝ์ด ๋ค์ด๊ฒ ํ๊ธฐ ์ํด ๋ค์๊ณผ ๊ฐ์ด ํ๋ค.
ํ์ผ์ ์
๋ ฅ์ผ๋ก ๋ฐ๊ธฐ
<infile
์ argv ์์ ์๋ ๋ช
๋ น ๋ผ์ธ ๋งค๊ฐ๋ณ์์ ํฌํจ๋์ง ์๋๋ค. ์
๋ ฅ ์ ํ์ ๋ง์ฝ ์
๋ ฅ์ด ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์ผ๋ก๋ถํฐ ์จ๋ค ํด๋ ๋ฐ์์๋ ๋ณด์ด์ง ์๋๋ค.
๋ค๋ฅธ ํ๋ก๊ทธ๋จ์ ์ถ๋ ฅ์ ์
๋ ฅ์ผ๋ก ๋ฐ๊ธฐ
์์ ๊ฐ์ CLI ๋ช ๋ น์ด๋ otherprog์ prog๋ผ๋ ๋ ํ๋ก๊ทธ๋จ์ ์คํ์ํค๊ณ otherprog์ standard output์ prog์ standard input์ผ๋ก ๋๊ฒ ํ๋ค.
์ถ๋ ฅ์ ํ์ผ๋ก ์ ์ฅํ๊ธฐ
putchar
๋ ๋ฌธ์๋ฅผ ํ์ค ์ถ๋ ฅ์ธ ์คํฌ๋ฆฐ์ ๋ณด๋ธ๋ค. ์๋ฌ ๋ฐ์ ์์๋ EOF๋ฅผ ๋ฆฌํดํ๋ค. ์ถ๋ ฅ์ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ํ์ผ๋ก ์ ํ์ด ๊ฐ๋ฅํ๋ค.
์ ์ถ๋ ฅ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์๋ฅผ ์ฌ์ฉํ๋ ํ๋ก๊ทธ๋จ์ ์์ ๋ถ๋ถ์๋ ๋ฐ๋์ ๋ค์ ํ์ด ํ์ํ๋ค.
์ด๋ ์ด๋ฆ์ <>๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌถ๋๋ฐ ์ด๊ฒ์ ํ์ค ์ง์ ์ฅ์์ stdio.h
ํ์ผ์ด ์๋ค๋ ๋ป์ด๋ค.
๋ง๊ฐ ๊ดํธ ํํ ์ ๋ฆฌ
() parentheses
{} curly bracket or brace
[] square bracket or just bracket(US)
<> pointy bracket or less than greater than
7.2. Formatted Output-Printf
์ถ๋ ฅํจ์ printf๋ ๋ด๋ถ์ ์์น ๊ฐ์ ๋ฌธ์๋ก ๋ฐ๊พธ์ด ์ค๋ค.
printf๋ format์ด๋ผ๋ ๋ฌธ์์ด์ ์ถ๋ ฅํ ๋ ๋งค๊ฐ๋ณ์๋ฅผ ๋ณํํ๊ณ ํ์ํํ ๋ค์ ์ถ๋ ฅ์ํค๊ณ ์ถ๋ ฅ๋ ๋ฌธ์์ ๊ฐ์๋ฅผ ๋ฆฌํดํ๋ค. ์ถ๋ ฅํ์ ์ ์ด ๋ฌธ์์ด์ ๋ ์ข ๋ฅ๊ฐ ์๋๋ฐ, ํ๋๋ ์ถ๋ ฅ๋ ๋ณดํต์ ๋ฌธ์์ด๊ณ (๊ทธ๋ฅ ๋ฌธ์) ๋ ํ๋๋ ์ถ๋ ฅํ์์ ์ ํด์ฃผ๋ ์ปจ๋ฒ์ ๋ฌธ์(์ฑ ์์๋ conversion specification)์ด๋ค. ์ฆ ๋ณ์์ ์๋ฆฌ์์ ๋ํ๋ด๋ syntax์ด๋ค.
์ปจ๋ฒ์ ๋ฌธ์์ ์์๋ %๋ฅผ ๋ถ์ธ๋ค. %์ ์ปจ๋ฒ์ ๋ฌธ์ ์ฌ์ด์๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒ๋ค์ด ์ฌ ์ ์๋ค.
๋ณํ๋ ๋งค๊ฐ๋ณ์๋ฅผ ์ผ์ชฝ์ ๋ง์ถ์ด ์ถ๋ ฅํ๊ฒ ํ๋
-
๋ถํธ์ต์ ๋๋น๋ฅผ ์ง์ ํ๋ ์ซ์. ๋ณํ๋ ๋งค๊ฐ๋ณ์๋ ์ ์ด๋ ์ด ๋๋น๋ก ์ถ๋ ฅ๋๋ค. ๊ธธ์ด๋ณด๋ค ์งง๊ฒ ์ ๋ ฅํ๋ฉด ์ผ์ชฝ ๋๋ ์ค๋ฅธ์ชฝ์ ํญ์ ๋ง์ถ๊ธฐ ์ํด ๊ณต๋ฐฑ ๋๋ 0์ผ๋ก ์ฑ์์ง๋ค.
์ ํจ์ซ์๋ฅผ ํ๋๋ด๋ ๋ง์นจํ
.
์ ๋ฐ๋๋ฅผ ๋ํ๋ด๋ ์ซ์.
๋ฌธ์์ด์ ๊ฒฝ์ฐ : ์ต๋ ๊ธธ์ด๋ฅผ ์๋ฏธ
์ค์ํ์ ๊ฒฝ์ฐ : ์์์ ์ดํ ์ซ์ ๊ธธ์ด๋ฅผ ์๋ฏธ
์ ์ํ์ ๊ฒฝ์ฐ : ์ต์ ์ซ์ ๊ธธ์ด๋ฅผ ์๋ฏธ
๋ง์ผ ์ ์๊ฐ short๋ก ์ถ๋ ฅ๋์ด์ผ ํ๋ฉด
h
, long์ผ๋ก ์ถ๋ ฅ์ํค๋ ค๋ฉดl
์ ์ด๋ค.printf์ ์ปจ๋ฒ์ ๋ฌธ์๋ค
์ปจ๋ฒ์ ๋ฌธ์
์ถ๋ ฅ ํํ
d, i
int 10์ง์
o
int 8์ง์
x, X
int 16์ง์
u
int ๋ถํธ ์๋ 10์ง์
c
int ๋จ์ผ ๋ฌธ์
s
char* ๋ฌธ์์ด๋ก๋ถํฐ '\0'์ด ์์ ๋๊น์ง ๋ฌธ์๊ฐ ์ถ๋ ฅ๋๊ฑฐ๋ ์ ๋ฐ๋์ ์ํด ์ฃผ์ด์ง ๋ฌธ์์๋งํผ๋ง ์ถ๋ ฅ๋๋ค.
f
double [-]m, dddddd ์ฌ๊ธฐ์ d๋ ์ ๋ฐ๋์ ๋ฐ๋ผ ๋ค๋ฅด๋ค.(๊ธฐ๋ณธ์ 6์๋ฆฌ)
e, E
double [-]m, ddddd eยฑxx ๋๋ [-]m, ddddddEยฑxx, ์ฌ๊ธฐ์๋ d๋ ์ ๋ฐ๋์ ๋ฐ๋ผ.(๊ธฐ๋ณธ 6์๋ฆฌ)
g,G
double ๋ง์ผ ์ง์๊ฐ ์ฃผ์ด์ง ์ ๋ฐ๋ ๋ณด๋ค ํฌ๊ฑฐ๋ -4๋ณด๋ค ์์ผ๋ฉด %e or %E๋ฅผ ์ฌ์ฉํ๊ณ ๊ทธ๋ ์ง ์๋ค๋ฉด %f๋ฅผ ์ฌ์ฉํ๋ค. ๋ค์ ๋ถ๋ 0๊ณผ ์์์ ์ ์ถ๋ ฅ๋์ง ์๋๋ค.
p
void* ํฌ์ธํฐ, ์ด๋คํํ์ ํฌ์ธํฐ๋ ์ง์ด๋ฃ์ผ๋ฉด ์ฃผ์๊ฐ ์ถ๋ ฅ๋๋๋ฐ ์ด๋ ์์คํ ์ ๋ฐ๋ผ ๋ค๋ฆ.
%
๋ณํ๋์ง ์๋๋ค. ๊ทธ๋ฅ %์ถ๋ ฅ.
์ ๋ฐ๋๋ *๋ก๋ ํํํ ์ ์๋๋ฐ, ๊ทธ๋ฌ๋ฉด ์ถ๋ ฅํํ๋ ์ถ๋ ฅ๋ ๋งค๊ฐ๋ณ์์ ์ต๋ ๊ธธ์ด๋งํผ์ ๋ฆฌํดํ๋ค.
์ด๋ฅผํ ๋ฉด ๋ค์์ ๋ณด์.
์ฃผ์ํ ๊ฒ์ ์ปจ๋ฒ์ ๋ฌธ์๊ฐ ๋ํ๋ด๋ ๋ฐ์ดํฐ ํ์ ๊ณผ ํด๋น ๋งค๊ฐ๋ณ์์ ๋ฐ์ดํฐํ์ ์ด ์ผ์นํด์ผํ๋ค๋ ์ ์ด๋ค.
7.3. Variable-length Argument Lists
๊ฐ๋ณ ๊ธธ์ด(variable-length)๋ฅผ ๊ฐ์ง parameter ๋ฅผ portableํ๊ฒ ์ฒ๋ฆฌํ ์ ์๋ ํจ์๋ฅผ minprintf๋ฅผ ๋ง๋ค์ด๋ณด์.
๊ทธ๋ฅ ๋จ์ํ %s, %f, %d๋ฅผ ๋๋น๋ ์ ํจ์๋ฆฌ์ ๋ฐ์๋ฅผ ์ ํ์ง ์๊ณ ๋ฐ์ ๋ณ์ ๊ทธ๋๋ก๋ฅผ ์ถ๋ ฅํด์ฃผ๋ ๋ฏธ๋ ํจ์์ด๋ค.
7.4. Formatted Input-Scanf
ํจ์ scanf๋ printf์ ์ฌ์ฉ๋ฒ์ด ์ ์ฌํ ํจ์์ธ๋ฐ, ์ถ๋ ฅํจ์๊ฐ ์๋๊ณ ์ ๋ ฅํจ์์ด๋ค. scanf๋ ํ์ค ์ ๋ ฅ์ผ๋ก๋ถํฐ ๋ฌธ์๋ฅผ ์ฝ์ด ๋ค์ฌ์ format์ ๋ณํํ์์ ๋ฐ๋ผ ๊ทธ๋ค์ ํด์ํ๊ณ ๋งค๊ฐ๋ณ์์ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๋ค.
์ฆ, ํฌ๋งท๋ฌธ์์ด์ ๋งค๊ฐ๋ณ์๋ก ์ฃผ๊ณ ๋์ ์ ๋ ฅ์ ํ๋ฉด, ํด๋น ํฌ๋งท์ ๋ง๊ฒ ํด์ํ๋ค. ํฌ๋งท ๋ฌธ์์ด์ ์ฃผ์ง ์์ ๋ ๋ณดํต์ ๋งค๊ฐ๋ณ์๋ ์ ๋ ฅ๋๋ ๋ฌธ์๊ฐ ์์นํด์ผ ํ๋ ๊ณณ์ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ์ด๋ค. ์ฆ, ๋ฌธ์๊ฐ ์ ์ฅ๋๋ ๋ณ์์ ํฌ์ธํฐ๋ณ์์ด๋ค.
์ฌ๊ธฐ์ ํฌ๋งท๋ฌธ์์ด(์ปจ๋ฒ์ ๋ฌธ์์ด)์ ๋ค์์ ํฌํจํ๋ค.
๊ณต๋ฐฑ ๋๋ ํญ ์ฆ ํ์ดํธ์คํ์ด์ค๋ ๋ฌด์๋๋ค.
%๋ฅผ ์ ์ธํ ๋ณดํต ๋ฌธ์๋ค
%์ปจ๋ฒ์ ๋ฌธ์, ๋ณํ์ด ์์์ ์๋ฆฌ๋ *, ์ต๋ ์๋ฆฌ์๋ฅผ ํ์ํ๋ ์ซ์, short/long์ ์ ํด์ฃผ๋ h, l, L
cf. 16์ง์๋ ์์ด๋ก hexadecimal์ด๋ฉฐ x๋ ์ด๋ฅผ ์ํ ์ฝ์์ด๋ค.
๊ธฐ๋ณธ scanf ๋ณํ
์ปจ๋ฒ์ ๋ฌธ์
์ ๋ ฅ๋ฐ์ดํฐ : ๋งค๊ฐ๋ณ์ ํ์
d
10์ง์ ์ ์ : INT *
i
์ ์ : INT *, ์ ์๋ 8์ง์(์ซ์์์ O๋ฅผ ๋ถ์ด๋ฉด) ๋๋ 16์ง์(์ซ์์์ Ox ๋๋ OX๋ฅผ ๋ถ์ด๋ฉด)๊ฐ ๋ ์๋ ์๋ค.
o
8์ง์ ์ ์(์์ O๊ฐ ์๊ฑฐ๋ ์๋) : int *
u
๋ถํธ ์๋ 10์ง์ ์ ์ : unsigned int *
x
16์ง์ ์ ์(์์ Ox๋ OX๊ฐ ์๊ฑฐ๋ ์๋) : int *
c
๋ฌธ์ : char *, white space์ ๋ฐ์ด๋๊ธฐ๋ ํ์ง ์๋๋ค. ๋ค์์ non-white space ๋ฌธ์๋ฅผ ์ฝ์ด ๋ค์ด๋ ค๋ฉด %1s๋ฅผ ์ฌ์ฉํ๋ค.
s
๋ฌธ์์ด : char *, ๋ฌธ์์ด์ ์ํ ์ถฉ๋ถํ ํฌ๊ธฐ์ ๋ฌธ์ ๋ฐฐ์ด์ ๊ฐ๋ฆฌํจ๋ค. ๋ฌธ์์ด ๋์๋ '\0'์ ๋ถ์ธ๋ค.
e, f, g
๋ถํธ, 10์งํฌ์ธํฐ์ ์ง์๋ฅผ ์ ํ์ ์ผ๋ก ๊ฐ์ง ์ ์๋ ๋ถ๋์์์ ์ : float *
%
๋ฌธ์ % : ๋งค๊ฐ๋ณ์๋ก์ ํ ๋น์ ์ด์ด์ง์ง ์๋๋ค.
๋ณดํต ๊ฒฐ๊ณผ๋ ๋์๋๋ ๋งค๊ฐ๋ณ์๊ฐ ๊ฐ๋ฆฌํค๋ ๋ณ์์ ์ ์ฅ๋์ง๋ง, ์ปจ๋ฒ์ ๋ฌธ์ *์ ์ํด ์ ๋ ฅ๋๋ ํญ๋ชฉ์ ํ ๋น๋์ง ์๋๋ค. ์ ๋ ฅ ํ๋๋ non-white space๋ฌธ์์ ๋ฌธ์์ด๋ก ์ ์๋๊ณ ๋ค์์ white space๋ฌธ์๊น์ง ๋๋ ํ๋ ๋๋น๊ฐ ๋ช ์๋์์ ๊ฒฝ์ฐ ํ๋ ํญ๊น์ง์ ํ๋๊ฐ ๋๋ค.
๋ณต์กํ๊ฒ ์จ์์ง๋ง ๋ค์์ ์์๋ฅผ ๊ทธ๋ฅ ๋ณด์.
๋ค์๊ณผ ๊ฐ์ ํํ์ ๋ ์ง ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ธฐ ์ํ๋ค๋ฉด
scanf
๋ช
๋ น๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ด ์ด๋ค.
์ฌ๊ธฐ์๋ ํฌ๋งท๋ฌธ์์ด๋ก ์ธ๊ฐ์ง ๋ฐ์ดํฐํ์ ์ ์ง์ ํ๊ณ , ํ์ดํธ์คํ์ด์ค๋ก ๊ตฌ๋ถํ์ผ๋ฉฐ ํด๋น ์ ๋ ฅ๋ฐ์ดํฐ๋ฅผ day, monthname, year๋ก ํ ๋นํ๊ธฐ ์ํด ํฌ์ธํฐ๋ก ๋งค๊ฐ๋ณ์๋ฅผ ์ ๋ฌํ๋ค(monthname์ ๋ฐฐ์ด์ด๊ธฐ ๋๋ฌธ์ ์ด๋ฏธ ํฌ์ธํฐ๊ธฐ ๋๋ฌธ์ &๊ฐ ์๋ค).
mm/dd/yyํํ๋ก ์ฝ์ ์๋ ์๋ค.
์์ ๋๊ฐ์ง ์ ๋ ฅ์ค ์ด๋ค ํํ๋ ๋ฐ์๋ค์ผ ์ ์๊ฒ ํ๋ ค๋ฉด ์ ๋ ฅ๋ ๋ผ์ธ์ ํด๋น ํฌ๋งท๋ฌธ์์ด์ ์ผ์นํ๋์ง๋ฅผ ์กฐ๊ฑด๋ฌธ ์ผ์ผ๋ฉด ๋๋ค.
sscanf๋ CLI์์ ์ ๋ ฅ์ ๋ฐ๋ ๊ฒ์ด์๋๋ผ ์ ์ด์ ๋ฌธ์์ด์ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์์ ์ฝ๋ ํจ์์ด๋ค.
scanf : ํฐ๋ฏธ๋์์ ์
๋ ฅ์ ๋ฐ๋๋ค.
sscanf : ๋ฌธ์์ด ๋งค๊ฐ๋ณ์๋ฅผ ํตํด ์
๋ ฅ์ ๋ฐ๋๋ค.
7.5. File Access
์ฌ๊ธฐ์๋ ํ์ผ์ ์ก์ธ์คํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ค. ์ด ์์ ์ ํ์๋ก ํ๋ ํ๋ก๊ทธ๋จ์ผ๋ก cat์ด ์๋ค. cat์ ์ฌ๋ฌ๊ฐ ํ์ผ์ ๋ด์ฉ์ ํ์ค ์ถ๋ ฅ์ผ๋ก ๋ณด๋ธ๋ค. ์ฆ ๋ช๊ฐ ํ์ผ์ ๋ด์ฉ์ ๋ชจ์์ ํ๋ฉด์ ํ์ํด์ค๋ค. ์๋ฅผ ๋ค์ด
๋ ํฐ๋ฏธ๋์ x.c ํ์ผ๊ณผ y.c์ ๋ด์ฉ์ ์ถ๋ ฅํ๋ค.
๋ฌธ์ ๋ x.c๋ y.c ๊ฐ์ ํ์ผ ์ด๋ฆ์ ํ๋ก๊ทธ๋จ ๋ด์์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ๋๋ ํ๋ ๊ฒ์ด๋ค. ๊ท์น์ ๊ฐ๋จํ๋ค. ์ฝ๊ฑฐ๋ ์ฐ๊ธฐ ์ ์ ํ์ผ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์ fopen์ ์ํด ์ด๋ฆฌ๋ฉด ๋๋ค. fopen์ x.c ๋ฐ์์ ์ด๋ฆ์ ๋ฐ์๋ค์ฌ์ ํ์ผ์ ์ฝ๊ณ ์ฐ๊ธฐ ์ํด ์ฌ์ฉํ๋ ํฌ์ธํฐ๋ฅผ ๋ฆฌํดํ๋ค.
์ด ํฌ์ธํฐ๋ ํ์ผ ํฌ์ธํฐ๋ผ๊ณ ๋ถ๋ฆฌ๋ฉฐ ํ์ผ์ ๊ดํ ์ ๋ณด๋ฅผ ํฌํจํ๋ ๊ตฌ์กฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋๋ฐ, ์ด ๊ตฌ์กฐ์ฒด์๋ ๋ฒํผ์ ์์น์ ๋ฒํผ ๋ด์์์ ๋ฌธ์์ ์์น, ํ์ผ์ด ์ฝ๊ธฐ ์ํ ๊ฒ์ธ์ง ์ฐ๊ธฐ ์ํ ๊ฒ์ธ์ง, ์๋ฌ๋ EOF๋ฅผ ๋ง๋์ง ์์๋์ง ๋ฑ์ ์ ๋ณด๊ฐ ๋ค์ด ์๋ค.
์ฌ์ฉ์๋ ์ธ๋ถ ์ฌํญ์ ์ ํ์๊ฐ ์๋ค. <stdio.h>
์ ์๋ ํ์ค ์
์ถ๋ ฅ ์ ์์ FILE์ด๋ผ๋ ๊ตฌ์กฐ์ฒด์ ์ ์๊ฐ ์๊ธฐ ๋๋ฌธ์ด๋ค. ํ์ผ ํฌ์ธํฐ๋ฅผ ์ํด์๋ ๋จ์ง ๋ค์๊ณผ ๊ฐ์ ์ ์ธ๋ง ํ๋ฉด ๋๋ค.
ํ์ผ ํฌ์ธํฐ ์ ์ธ
FILE์ ๊ตฌ์กฐ์ฒด์ ์ด๋ฆ์ด ์๋๋ผ ๋ฐ์ดํฐ ํ์ ์ ์ด๋ฆ์ด๊ณ typedef(๊ตฌ์กฐ์ฒด ์ฅ์์ ๋ฐฐ์ ๋ ์ปค์คํ ํ์ ๋ํ์ธ)์ ์ํด ๊ตฌํ๋๋ค.
ํ๋ก๊ทธ๋จ์์ fopen์
์ ๊ฐ์ด ์ด๋ค.
fopen์ ์ฒซ๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ ๋ฌธ์์ด๋ก ์ด๋ฃจ์ด์ง ํ์ผ์ ์ด๋ฆ์ด๊ณ , ๋๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ ๋ฌธ์์ด๋ก ์ด๋ฃจ์ด์ง mode์ธ๋ฐ r(read), w(write), a(append) ๊ฐ ์๋ค.
๋ง์ผ writing๊ณผ appending ์ํ ํ์ผ์ด ์๋ค๋ฉด ํ์ผ์ ์๋ก ๋ง๋ค์ด์ง๋ค. writing์ผ๋ก ์ด๋ฏธ ์กด์ฌํ๋ ํ์ผ์ ์ด๋ฉด ๊ธฐ์กด์ ๋ด์ฉ์ ์ง์์ง๋ค.
์กด์ฌํ์ง ์๋ ํ์ผ์ ์ฝ๋ ๊ฒ์ ์๋ฌ์ด๋ฉฐ ์๋ฌ์๋ ํ๊ฐ๋์ง ์๋ ํ์ผ์ ์ฝ์ ๊ฒฝ์ฐ ๋ฑ ์ฌ๋ฌ๊ฐ์ง ์์ธ์ด ์๋ค. ๋ง์ฝ ์๋ฌ๊ฐ ์์ ๋ fopen์ NULL์ ๋ฆฌํดํ๋ค.
๋ค์์ผ๋ก ํ์ํ ๊ฒ์ ์ด๋ฆฐ ํ์ผ์ ์ฝ๊ฑฐ๋ ์ฐ๋ ๋ฐฉ๋ฒ์ด๋ค. ์ด๋ฅผ ์ํ ๋ฐฉ๋ฒ์๋ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์๋๋ฐ ๊ทธ์ค getc์ putc๊ฐ ๊ฐ์ฅ ๊ฐ๋จํ๋ค.
getc
getc๋ ํ์ผ๋ก ๋ถํฐ ์ฐจ๋ก๋๋ก ํ๋ฌธ์์ฉ ์ฝ์ด ๋ฆฌํดํ๋ค. getc์์๋ ์ฌ์ฉํ๋ ํ์ผ์ ํฌ์ธํฐ๊ฐ ํ์ํ๋ค. ํ์ผ์ ๋์ด๊ฑฐ๋ ์๋ฌ๊ฐ ๋ฐ์ํ๋ฉด EOF๋ฅผ ๋ฆฌํดํ๋ค.
putc
putc๋ ๋ฌธ์ c๋ฅผ fpํ์ผ๋ก ์ฐ๊ณ ์ฐ์ฌ์ง ๋ฌธ์๋ฅผ ๋ฆฌํดํ๋ค. ์๋ฌ๊ฐ ๋ฐ์ํ๋ค๋ฉด EOF๋ฅผ ์ฐ๊ณ EOF๋ฅผ ๋ฆฌํดํ๋ค.
Cํ๋ก๊ทธ๋จ์ด ์ฒ์ ์ํ๋ ๋ OSํ๊ฒฝ์ ์ธ๊ฐ์ ํ์ผ์ ์๋์ ์ผ๋ก ์ด๊ณ ์ธ๊ฐ ํ์ผ์ ์ดใ ํ ํฌ์ธํฐ๋ฅผ ๋ฐฐ์ ํ๋ค. ์ด ํ์ผ๋ค์ ํ์ค์ถ๋ ฅ, ํ์ค ์ ๋ ฅ๊ณผ ํ์ค ์๋ฌ ์ถ๋ ฅ์ด๋ค.
์ด์ ๋์ํ๋ ํ์ผ ํฌ์ธํฐ๋ stdin, stdout, stdeff๋ก ๋ถ๋ฆฌ๊ณ <stdio.h>
์์ ์ ์ธ๋์ด ์๋ค. ๋๊ฐ stdin์ ํค๋ณด๋๋ก ๋ฐ๊ณ stdout, stderr์ ํฐ๋ฏธ๋์ ์ถ๋ ฅํ์ง๋ง ํ์ผ์ด๋ ํ์ดํ๋ก ์ถ๋ ฅ๋๋ ์์น๋ฅผ ๋ฐ๊ฟ ์ ์๋ค.
getchar์ putchar๋ getc, putc, stdin, stdout์ผ๋ก ์ ์๋ ์๋ ์๋ค.
ํ์ผ์ ์ ํํ๋ ์ ๋ ฅ๊ณผ ์ถ๋ ฅ์ ์ํํ๊ธฐ ์ํด fscanf, fprintf๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ์ฒซ๋ฒ์งธ ๋งค๊ฐ๋ณ์๊ฐ ํ์ผ์ ํฌ์ธํฐ์ธ ๊ฒ์ ์ ์ธํ๋ฉด scanf, printf์ ๊ฐ๋ค. ๋๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ ํฌ๋งท๋ฌธ์์ด์ด๋ค.
์ด๋ฐ ๊ฒ์ ๋ฐํ์ผ๋ก ์ฐ๋ฆฌ๋ ์ด์ ํ์ผ์ ๋ด์ฉ์ ์ํ๋ ๊ณณ์ผ๋ก ์ถ๋ ฅํ๋ catํ๋ก๊ทธ๋จ์ ๋ง๋ค ์ ์๋ค. ๋ง์ฝ CLI์์ ๋งค๊ฐ๋ณ์๊ฐ ์๋ค๋ฉด ์ด๋ค์ ํ์ผ์ด๋ฆ์ด๋ ๊ธฐํ ์ง์๋ฅผ ์ํ ๊ฒ์ผ๋ก ํด์๋๊ณ ๊ทธ๋ ์ง ์๋ค๋ฉด ์ฐ๋ฆฌ๊ฐ ์ง์ ์ ๋ ฅํ๋ ๊ฒ์ ์ฒ๋ฆฌํ๋ค.
๋ค์์ ํจ์ fclose๋
fopen์ ์ญ๊ธฐ๋ฅ์ ๊ฐ์ง๋ค. ์ด ํจ์๋ fopen์ ์ํด ์ค์ ๋ external name๊ณผ ํ์ผ ํฌ์ธํฐ ์ฌ์ด์ ์ฐ๊ฒฐ ์ํ๋ฅผ ํด์ ํ๊ณ ํ์ผ ํฌ์ธํฐ๋ฅผ ๋ค๋ฅธ ํ์ผ์ ์ฌ์ฌ์ฉํ ์ ์๊ฒ ํ๋ค. ๋ํ putc์ ์ถ๋ ฅ๋ฌธ์๋ฅผ ์ ์ฅํ๋ ๋ฒํผ๋ฅผ ์์ ์ค๋ค๋ ๊ฒ์ด๋ค. fclose๋ ํ๋ก๊ทธ๋จ์ด ์ ์์ ์ผ๋ก ๋๋ฌ์ ๋๋ ๊ฐ์์ ์ด๋ฆฐ ํ์ผ์ ๋ํด ์๋์ ์ผ๋ก ํธ์ถ๋๋ค. ์ฆ ์๋์ผ๋ก ํฌ์ธํฐ๋ฅผ ํด์ ํ๋ค.
7.6. Error Handllng-Stderr and Exit
catํจ์์ ์๋ฌ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ์ ๊ทธ๋ค์ง ์ข์ง ์๋ค. ๋ง์ฝ ํ์ผ ์ค ํ๋๊ฐ ์ด๋ค ์ด์ ๋ก ์ ๊ทผํ ์ ์์ ๋, ์๋ฌ๋ฉ์์ง๊ฐ ์ถ๋ ฅ๋ฌธ์ ๋์์ ๋ํ๋๋ค. ์ถ๋ ฅ์ ํ์ดํ๋ผ์ธ์ ํตํด ํ์ผ๋ก ์ ์ฅํ๋ค๋ฉด ์ด๋ฐ ์๋ฌ๊ฐ ํ์ผ์ ๋ค์ด๊ฐ๋ ๊ฒ์ ๊ณค๋ํ๋ค.
์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ stderr๋ก ๋ถ๋ฆฌ๋ ๋ ํ๋์ stream์ stdin, stdout๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ํ๋ก๊ทธ๋จ์์ ํ ๋นํ์. ์ถ๋ ฅ์ ํฐ๋ฏธ๋ ๋๋ ํ์ผ ์ด๋๋ก ์ง์ ํ๋ stderr์ ์๋ฌ๋ฌธ์ ํฐ๋ฏธ๋์ ๋ํ๋๋ค.
ํ๋ก๊ทธ๋จ์ ๋๊ฐ์ง ๋ฐฉ์์ผ๋ก ์๋ฌ๋ฅผ ์๋ฆฐ๋ค.
์ฒซ์งธ, fprintf์ ์ํด ๋ง๋ค์ด์ง ์๋ฌ๋ฉ์์ง๋ฅผ stderr๋ก ๋ณด๋ด๋ฉด ํฐ๋ฏธ๋์ ๋ํ๋๊ฒ๋๋ค. ํ๋ก๊ทธ๋จ ์ด๋ฆ์ argv[0]์ผ๋ก ๋ถํฐ ํฌํจํ์ผ๋ฏ๋ก ๋ค๋ฅธ ํ๋ก๊ทธ๋จ๊ณผ ํจ๊ป ์ฌ์ฉ๋๋๋ผ๋ ์๋ฌ์ ๊ทผ์์ง๋ฅผ ์ ์ ์๋ค.
๋์งธ, ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์ exit์ ์ฌ์ฉํ๋ค. ์ด๊ฒ์ด ํธ์ถ๋๋ฉด ํ๋ก๊ทธ๋จ ์ํ์ด ๋๋๊ฒ ๋๋ค. exit์ ๋ฆฌํด ๊ฐ์ ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์์๋ ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก ๊ทธ ํ๋ก๊ทธ๋จ ์ํ์ ์ฑ๊ณต์ฌ๋ถ๋ฅผ ๊ฒ์ฌํ ์ ์๋ค. exit์ด 0์ ๋ฆฌํดํ๊ฒ ๋๋ฉด ๋ชจ๋ ๊ฒ ์๋๊ณ ์๋ ๊ฒ์ด๊ณ , 0์ด ์๋ ๊ฐ์ ๋ฆฌํดํ๋ฉด ๋น์ ์์ ์ด๋ผ๋ ๋ป์ด๋ค. exit์ ์ด๋ฆฐ ํ์ผ์ ๋ํด fclose๋ฅผ ํธ์ถํ๋ฉฐ ๋ฒํผ๋ฅผ ์ง์ฐ๊ณ ํ์ผ์ ๋ซ๋๋ค.
throw์ ์ ์ ๊ฐ๋ค!
mainํจ์์ return expr ์ผ๋ก ํํํ๊ฑฐ๋ exit(expr)์ผ๋ก ํํํ๋ ๊ฒ์ ๊ฐ์ ํํ์ด๋ค. exit์ ๋ค๋ฅธ ํจ์๋ก๋ถํฐ ํธ์ถํ ์ ์๋ ์ ๋ฆฌํ ์ ์ ๊ฐ์ง๊ณ ์๋ค. ferror๋ fp์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค๋ฉด 0์ด ์๋ ๊ฐ์ ๋ฆฌํดํ๋ค(๊ทธ๋์ ์์ ์กฐ๊ฑด๋ฌธ์์ด ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๋ ๊ฒ์ด๋ค).
์ถ๋ ฅ ์๋ฌ๋ ๋งค์ฐ ๋๋ฌผ๊ธด ํ์ง๋ง ์ ์ฅ๊ณต๊ฐ(HDD)์ด ๊ฝ์ฐจ์์ ๊ฒฝ์ฐ ๋ฐ์ํ ์ฌ์ง๊ฐ ์๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ํ๋ก๊ทธ๋จ์์ ์ด ์ ์ ์ ๊ฒ์ฌํด์ผ ํ๋ค. feof(FILE *)๋ ferror์ ์ ์ฌํ์ด๋ค. ์ด ํจ์๋ ํ์ผ์ ๋์ ๋ฐ๊ฒฌํ๋ฉด 0์ด ์๋ ๊ฐ์ ๋ฆฌํดํ๋ค(EOF!).
7.7. Line Input and Output
ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ด์ ์ฅ๋ค์์ ์ฌ์ฉํ getline ํจ์์ ์ ์ฌํ fgets ์ ๋ ฅํจ์๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
fgets๋ ๋ค์ ๋ผ์ธ(\n
๋ฅผ ํฌํจํ)์ ํ์ผ fp๋ก๋ถํฐ ๋ฌธ์์ด์ธ line์ ์ฝ์ด ๋ค์ด๋๋ฐ, ์ต๋ maxline-1 ์ ๋ฌธ์๋ฅผ ์ฝ์ ์ ์๋ค. ์
๋ ฅ ์๋ฃ๋ ๋ผ์ธ์ '\0'์ ์ํด ์ข
๋ฃ๋๋ค. ๋ณดํต fgets๋ line์ ๋ฆฌํดํ๋๋ฐ, ํ์ผ์ ใฒ๋์ด๊ฑฐ๋ ์๋ฌ๋ฅผ ๋ง๋ฌ์ ์์๋ NULL์ ๋ฆฌํดํ๋ค.
์ถ๋ ฅํจ์ fputs๋ '\0'์ ํฌํจํ์ง ์๋ ๋ฌธ์์ด์ ํ์ผ์ ์ถ๋ ฅ์ํจ๋ค.
์๋ฌ๊ฐ ๋ฐ์ํ๋ฉด EOF๋ฅผ ๋ฆฌํดํ๊ณ , ๋๋จธ์ง ๊ฒฝ์ฐ์๋ 0์ ๋ฆฌํดํ๋ค.
gets์ puts๋ stdin๊ณผ stdout๊ณผ stdout์ ์์ฉ๋๋ค๋ ์ ์ด fgets, fputs์ ๋ค๋ฅธ์ ์ด๋ค(fgets, fputs์ f๊ฐ ์์งํ๋ฏ ์ด ํจ์๋ค์ ํ์ผ์ ์ ์ฉ๋๋ค). gets๋ ๋ง์ง๋ง์ '\n'์ ์ ๊ฑฐํ์ง๋ง puts๋ ๊ทธ๊ฒ์ ์ถ๊ฐํ๋ค.
fgets๋ฅผ ์ฌ์ฉํด์ getline์ ์์ฑํ๋ ๊ฒ์ ์ด๋ ต์ง ์๋ค.
7.8. Miscellaneous Functions
ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์๋นํ ๋ค์ํ ํจ์๋ฅผ ์ ๊ณตํ๋ค. ์ด ์ ์์๋ ๊ทธ์ค ์์ฃผ ์ฐ์ด๋ ๊ฒ์ ๋ํด ์ค๋ช ํ๋ค.
๋ฌธ์์ด ์กฐ์
<string.h>
์ ์๋ ํจ์๋ค์ ๋ค์๊ณผ ๊ฐ๋ค. ๋งค๊ฐ๋ณ์์ ์ด๋ฆ์์ s,t ๋ char * ์ด๊ณ , c์ n์ int์ด๋ค.
ํจ์
๊ธฐ๋ฅ
strcat(s,t)
t๋ฅผ s์ ๋์ ์ฐ๊ฒฐ์ํจ๋ค.
strncat(s,t,n)
t์ค n๊ฐ์ ๋ฌธ์๋ฅผ s์ ๋์ ์ฐ๊ฒฐ์ํจ๋ค.
strcmp(s,t)
s-t๋ฅผ ๋ฆฌํดํ๋ค.
strncmp(s,t,n)
strcmp์ ๊ฐ์ง๋ง ์ฒ์ n๊ฐ์ ๋ฌธ์๋ง์ด ๋์์ด๋ค.
strcpy(s,t)
s์ t๋ฅผ ๋ณต์ฌํ๋ค.
strncpy(s,t,n)
t์ n๊ฐ ๋ฌธ์๋ฅผ s์ ๋ณต์ฌํ๋ค.
strlen(s)
s์ ๊ธธ์ด๋ฅผ ๋ฆฌํดํ๋ค.
strchr(s,c)
s์์ ์ฒ์ ๋ฐ๊ฒฌ๋ ๋ฌธ์ c์ ํฌ์ธํฐ๋ฅผ ๋ฆฌํดํ๊ฑฐ๋ ์กด์ฌํ์ง ์์ผ๋ฉด NULL์ ๋ฆฌํดํ๋ค.
strrchr(s,c)
s์์ ๋ง์ง๋ง์ ๋ฐ๊ฒฌ๋ ๋ฌธ์ c์ ํฌ์ธํฐ๋ฅผ ๋ฆฌํดํ๊ฑฐ๋ ์กด์ฌํ์ง ์์ผ๋ฉด NULL์ ๋ฆฌํดํ๋ค.
๋ฌธ์๋ถ๋ฅ์ ๋ณํ
<ctype.h>
์ ํจ์๋ ๋ค์๊ณผ ๊ฐ๋ค. c๋ unsigned char๋ก ๋ํ๋ผ ์ ์๋ int๊ฑฐ๋ EOF์ด๋ค. `
Last updated
Was this helpful?