1. ๋ฌธ์ ์๋ฃํ์ ํน์ง
- ์ ์ ์๋ฃํ์ธ char๋ฅผ ์ด์ฉํด์ ๋ฌธ์ ํ๊ฐ๋ฅผ ์ ์ฅํ๋ค. ์ ์ ์๋ฃํ์ด๋ฏ๋ก ๋ง์ ๋บ์ ๋ ๊ฐ๋ฅํ๋ค.
- ์ ์๋ ์ซ์๋ฅผ ์๋ฏธํ๋๋ฐ ์ด๋ฅผ ์ด๋ป๊ฒ ๋ฌธ์๋ก ๋ณํํ๋๋ฉด ๋ฐ๋ก ์์คํค ์ฝ๋๋ฅผ ํตํด ๋ณํํ์ฌ ์ฌ์ฉํ๋ค.
- 0์ 48, A๋ 65, a๋ 97 ์ ๋๋ง ์ธ์ธ ๊ฒ์ ๊ถ์ฅํ๊ณ ์์ผ๋ ์ธ์ฐ๊ณ ๋์ด๊ฐ์.
- C์ธ์ด์์ ๋ฌธ์๋ ''(์์ ๋ฐ์ดํ)๋ก ๋ฌถ์ด์ ํํํ๋ค.
- ์์ ๋ฐ์ดํ๋ ๋ฌธ์ ํ๋๋ง ๋ฌถ์ ์ ์๊ณ , ๋๊ฐ ์ด์์ ๋ฌถ์ ์ ์๋ค.
2. ๋ฌธ์ ํจ์
**๋ค์ด๊ฐ๊ธฐ์ ์ C ํ๋ก๊ทธ๋จ์์๋ ํค๋ณด๋, ๋ชจ๋ํฐ์ ๊ฐ์ ๋๋ถ๋ถ์ ์ฝ์ ์ฅ์น๋ ์๋์ผ๋ก ์ด๋ฆฌ๋ ํ์ผ์ฒ๋ผ ๋ค๋ค์ง๋ค.
๋ฐ๋ผ์, C์ธ์ด์์๋ stdin ํ์ค ์คํธ๋ฆผ์ ํตํด ์ ๋ ฅ ์ฅ์น๋ฅผ ๋ค๋ฃจ๊ณ , stdout ํ์ค ์คํธ๋ฆผ์ ํตํด ์ถ๋ ฅ ์ฅ์น๋ฅผ ๋ค๋ฃจ๊ฒ ๋๋ค.
***์คํธ๋ฆผ(stream)์ด๋?
- ์ค์ ์ ์ ๋ ฅ์ด๋ ์ถ๋ ฅ์ด ํํ๋ ๋ฐ์ดํฐ์ ์ด์ํ๋ ํ๋ฆ์ ์๋ฏธํ๋ค. ์ฆ, ์คํธ๋ฆผ์ ์ด์์ฒด์ ์ ์ํด ์์ฑ๋๋ ๊ฐ์์ ์ฐ๊ฒฐ๊ณ ๋ฆฌ๋ฅผ ์๋ฏธํ๋ค.
C์ธ์ด์์ ํ์ผ๊ณผ์ ์ฐ๊ฒฐ์ ์ํ ์คํธ๋ฆผ์ ์ฌ์ฉ์๊ฐ ์ง์ ์์ฑํ๊ณ ์๋ฉธ์์ผ์ผ ํ๋ค.
ํ์ง๋ง ์ฝ์ ์ฅ์น์ ๋ํ ์คํธ๋ฆผ์ ํ๋ก๊ทธ๋จ ์คํ ์ ์๋์ผ๋ก ์์ฑ๋๋ฉฐ, ํ๋ก๊ทธ๋จ ์ข ๋ฃ ์ ์๋์ผ๋ก ์๋ฉธํ๋ค.
- ๋ณธ๋ก ๋ณด๋ค ์๋ก ์ด ๊ธธ์์ผ๋, ์ฌํผ getchar() ํจ์๋ก ํ์ค ์ ๋ ฅ ์คํธ๋ฆผ์ธ ํค๋ณด๋๋ก๋ถํฐ ํ๋์ ๋ฌธ์๋ฅผ ์ ๋ ฅ๋ฐ์ ์ ์๋ค.
- ๊ทธ๋ฆฌ๊ณ , scanf() ํจ์์ ์์์ง์ ์ %c๋ฅผ ํตํด ์ฝ์์ฐฝ์์ ์ฌ์ฉ์๋ก๋ถํฐ ์ ๋ ฅ ๋ฐ์ ์๋ ์๋ค.
- printf() ํจ์์ ์์ ์ง์ ์ %c๋ฅผ ํตํด ๋ฌธ์๋ฅผ ์ถ๋ ฅํ ์ ์๋ค.
- ์ด๋ ์ด์ฉ๋ ์ ์๋ ํน์ด ๋ณ์๋ EOF ( End Of File )์ด๋ค. ์ด ๊ฐ์ ์ค์ ๋ก -1์ ๋ํ๋ธ๋ค. C์ธ์ด๋ ์ด์์ฒด์ ์ ๊ด๊ณ์์ด ์ด ๋ณ์๋ฅผ ์ด์ฉํ์ฌ ํ์ผ์ ๋์ ๋๋ฌ ํ์ ๋ ํน๋ณํ ๊ฐ์ ๋ฐํํ๋๋ก ํ๊ฒ ๋์ด์๋ค. (์๋์ฐ์์๋ Ctrl+Z ํ Enterํ๋ฉด ๋ฐ์๋จ)
3. ๋ฌธ์์ ๋ฒํผ
- C์ธ์ด์์๋ ์์์ ๋ณธ ํ์ค ์ ์ถ๋ ฅ ํจ์๋ฅผ ์ฌ์ฉํ ๋์ ๋ฒํผ(buffer)๋ผ๋ ์์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฌ์ฉํ๊ฒ ๋๋ค.
- ์ด ๋ฒํผ๋ผ๋ ๊ฒ์ ์ฌ์ฉํ๋ฉด์ ์ป๋ ์ฅ์ ์
a. ๋ฌธ์๋ฅผ ํ๋์ฉ ์ ๋ฌํ๋ ๊ฒ์ด ์๋ ๋ฌถ์ด์ ํ ๋ฒ์ ์ ๋ฌํ๋ฏ๋ก, ์ ์ก ์๊ฐ์ด ์ ๊ฒ ๊ฑธ๋ ค ์ฑ๋ฅ์ด ํฅ์๋๋ค.
b. ์ฌ์ฉ์๊ฐ ๋ฌธ์๋ฅผ ์๋ชป ์ ๋ ฅํ์ ๊ฒฝ์ฐ ์์ ์ ํ ์๊ฐ ์๋ค.
- ๋จ์ ์ ๋น ๋ฅธ ๋ฐ์์ด ์๊ตฌ๋๋ ํ๋ก๊ทธ๋จ๊ณผ ๊ฐ์ ๊ณณ์ ํค๋ฅผ ๋๋ฅด๋ ์ฆ์ ๋ฐ๋ก ์ ๋ฌ๋์ด์ผํ๋ ๊ณณ์๋ ์ ์ ์น ๋ชปํ๋ค๋ ์ ์ด๋ค.
A. ๋ฒํผ๋ง์ ๋ฐฉ์
-- ์์ ๋ฒํผ๋ง( fully bufffered)
-- ๋ผ์ธ ๋ฒํผ๋ง( line-buffered)
-์์ ๋ฒํผ๋ง์ ๋ฒํผ๊ฐ ๊ฐ๋ ์ฐจ๋ฉด ๋ฒํผ ์์ ๋ด์ฉ์ ๋ชฉ์ ์ง๋ก ๋ณด๋ด๋ ๋ฐฉ์์ด๋ค. ์ด ๋ฐฉ์์ ๋ณดํต ํ์ผ ์ ์ถ๋ ฅ์์ ์ฌ์ฉ๋๋ค.
-๋ผ์ธ ๋ฒํผ๋ง์ ์ ๋ ฅ๋ ๋ฌธ์ ์ค ๊ฐํ ๋ฌธ์๊ฐ ๋ํ๋ ๋๋ง๋ค ๋ฒํผ ์์ ๋ด์ฉ์ ๋ชฉ์ ์ง๋ก ๋ณด๋ด๋ ๋ฐฉ์์ด๋ค. ์ด ๋ฐฉ์์ ๋ณดํต ํค๋ณด๋ ์ ๋ ฅ์์ ์ฌ์ฉ๋๋ค.
-์ด๋ฌํ ์ ๋ ฅ ์์ ๋ฟ๋ง ์๋๋ผ printf() ํจ์ ๋ฑ์ ํตํด ๋ชจ๋ํฐ์ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ ๋๋ ๋ฒํผ๋ฅผ ์ฌ์ฉํ๋ค.
์ถ๋ ฅํ๊ณ ์ ํ๋ ๋ฐ์ดํฐ๋ ์ผ๋จ ์ถ๋ ฅ ๋ฒํผ์ ์ ์ฅ๋์๋ค๊ฐ ์ถ๋ ฅ ์คํธ๋ฆผ์ ํตํด ๋ชจ๋ํฐ๋ก ์ ์ก๋๋ค.
๊ทธ๋์ ๋ฐ์๋๋ ์ค๋ฅ๊ฐ ์๋ค.
#include <stdio.h>
int main(void) {
char a[20];
char c[20];
scanf("%s", a);
printf("%s\n", a);
scanf("%s", c);
printf("%s\n",c);
return 0;
}
///
์
๋ ฅ: Hello World
์ถ๋ ฅ:
Hello
World
///
์ด ์ฝ๋์ ๊ฒฐ๊ณผ๋ ํ๋๋ง ์ ๋ ฅํด๋ ๋ค์ ๋ณ์ ์ ๋ฐ์๋ฒ๋ฆฌ๊ณ ๊ทธ๋ฅ ์ฒซ๋ฒ์งธ ๋ฐ์ ๋ณ์์ ๋ท ๋ฉ์ด๋ฆฌ ๊ธ์๋ฅผ ์ถ๋ ฅํด์ฃผ๊ณ ๋ ๋๋ด๋ฒ๋ฆฐ๋ค.
์๊ทธ๋ด๊น? ๋ฐ๋ก ๋ฒํผ์ ๋ฌธ์ ๋ค.
scanf() ํจ์๋ ๋์ด์ฐ๊ธฐ, ๊ฐํ, ํญ ๋ฑ ๊ณต๋ฐฑ๋ฌธ์๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ตฌ๋ถํด์ ๊ฐ์ ธ์ค๊ธฐ๋๋ฌธ์ a ๋ณ์์๋ Hello๊น์ง์ ๋ฌธ์์ด์ด ์ ์ฅ์ด ๋๊ณ , ๋ฒํผ์๋ World๋ฌธ์์ด์ด ๋จ์์๋ ์ํ๊ฐ ๋๋ ๊ฒ์ด๋ค. ๊ทธ๋ฆฌ๊ณ c์ World๊ฐ ์ ์ฅ์ด ๋๊ณ , ๊ทธ๋ค์ \n๊ฐ ๋์์ ์ ์ฅ์ด ๋๋๊ฒ ๋๋ ๊ฒ์ด๋ค.
-- ํด๊ฒฐ์
- ์ถ๋ ฅ ๋ฒํผ๋ฅผ ์ง์ฐ๋ ํจ์ : fflush(stdout) ; ๊ฐ์ ๋ก ์ถ๋ ฅ๋ฒํผ์ ๋จ์์๋ ๋ฐ์ดํฐ๋ค์ ์ถ๋ ฅ ์คํธ๋ฆผ์ผ๋ก ์ด๋์ํค๋ ๊ฒ์ด๋ค.
- ์ ๋ ฅ ๋ฒํผ ์ง์ฐ๊ธฐ : getchar()ํจ์ ์ด์ฉํ ๋ฐฉ์
*getchar() ํจ์๋ ์ต์ข ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ์คํธ๋ฆผ์์ ํ๋์ ๋ฌธ์ ์์คํค ์ฝ๋ ๊ฐ์ ์ป์ด์ค๋ ํจ์๋ค.
#include <stdio.h>
int main(void) {
char a[20];
char c[20];
fputs("Type first word : ", stdout); //ํ์ค ์ถ๋ ฅ ์คํธ๋ฆผ ๊ด๋ จ: stdout
fgets(a,sizeof(a),stdin); // ํ์ค ์
๋ ฅ ์คํธ๋ฆผ ๊ด๋ จ: stdin
// ๊ฐํ ๋ฌธ์๋ฅผ ๋ง๋๋ฉด ์
๋ ฅ์ ๋ฉ์ถ๋ฏ๋ก ์
๋ ฅ ๋ฒํผ๋ฅผ ๋น์ด๋ค.
while (getchar() != '\n' ) {}
fputs("Type second word: ", stdout);
fgets(c,sizeof(c),stdin);
printf("first word : %s\n",a);
printf("second word : %s\n",c);
return 0;
}
///
๊ฒฐ๊ณผ
Type first word : Hello
Type second word: World
first word : Hello
second word : World
///
1. ๋ฌธ์์ด ๊ฐ๋
- ๋ฌธ์์ด์ ๋ฌธ์๋ค์ ๋ฐฐ์ด์ ๋ปํ๋ค.
- ๋ฌธ์์ด์ ์ปดํจํฐ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ์ ๋ง์ง๋ง์ ๋(NULL) ๊ฐ์ ํฌํจํ๋ค.
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
H | E | L | L | O | W | O | R | L | D | \0 |
์ถ๋ ฅ => HELLO WORLD
๋ฐ๋ผ์, ์ถ๋ ฅ ์์ฒด์๋ ํฌํจ๋์ง๋ ์์ง๋ง ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ์์๋ NULL๊ฐ์ด ํฌํจ๋๋ฏ๋ก ์ถ๋ ฅ์ ๋ฌธ์์ด์ ๋์ ๋ํ๋ด๋ ๊ตฌ๋ถ์๋ก์ ์ค์ํ ์ญํ ์ ํ๊ฒ๋๋ค.
2. ๋ฌธ์์ด๊ณผ ํฌ์ธํฐ
- ๋ฌธ์์ด ํํ๋ก ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ๋ฉด ํฌ์ธํฐ์ ํน์ ํ ๋ฌธ์์ด์ ์ฃผ์๋ฅผ ๋ฃ๊ฒ ๋๋ค. = ์ด๊ฑธ ๋ฌธ์์ด ๋ฆฌํฐ๋ด์ด๋ผ๊ณ ํ๋ค.
- ๋ฌธ์์ด์ ์ฌ์ฉํ ๋๋ ๋ " "(ํฐ ๋ฐ์ดํ)๋ก ๋ฌถ์ ๋ฌธ์์ด๋ง ํ ๋นํด์ผํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฌธ์์ด์ ์ถ๋ ฅํ ๋๋ ์์์ง์ ์๋ฅผ %s๋ฅผ ์ฌ์ฉํ๋ค.
- ์์ ๋ก์ ๋ฌธ์์ด์ ํฌ์ธํฐ๋ก ์ง์ ํ๋ ๊ฒ๊ณผ ๊ทธ๋ฅ ๋ฌธ์๋ก ๋ณ์์ ์ ์ฅํด์ ์ถ๋ ฅํ๋ ๊ฒ์ ์ฐจ์ด๋ฅผ ๋ณด์ฌ์ฃผ๋๋ก ํ๊ฒ ๋ค.
#include <stdio.h>
int main(void) {
char *a = (char*)"Hello World";
char b = (char)'Test';
printf("%s\n", a);
printf("%c\n",b);
return 0;
}
///
์ถ๋ ฅ
Hello World
t
///
ISO C++11 does not allow conversion from string literal to 'char *' [-Wwritable-strings]
๋ผ๊ณ ๋จ๊ธธ๋ ๊ฒ์ํด์ ํ๋ณํ ์์ผ์ฃผ์๋ค.
- ๊ฒฐ๊ณผ์์ ๋ณด๋ค์ํผ ์๋ฌด๋ฆฌ ๋ฌธ์ ๋ณ์์ ์ฌ๋ฌ ๊ธ์๋ฅผ ์ง์ด๋ฃ์ผ๋ ค ํด๋ด๋ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ 1Byte๊ธฐ ๋๋ฌธ์ ์ถ๋ ฅ๋ 1๊ฐ๋ง๋๋ค.
- ๊ทธ๋ฆฌ๊ณ ํ ๋น๋ ์ซ์ 12๋ฅผ ๋ณด๋ฉด ์ญ์ ์ค์ ๋ก NULL๊ฐ์ด ํฌํจ๋ ์๋ฆฟ๊ฐ์ด๋ผ๋ ๊ฒ์ ์ ์ ์๋ค.
- ํ์ง๋ง ํฌ์ธํฐ์ ๋ฌธ์์ด์ ์ง์ด๋ฃ์ ์ํ๋ก์ a[1] ์ด๋ฐ์์ผ๋ก ์ธ๋ฑ์ค๋ก ๋ฌธ์์ ์ ๊ทผํ ์ ์๋ค.
#include <stdio.h>
int main(void) {
char *a = (char*)"Hello World";
printf("%c\n", a[1]);
printf("%c\n", a[4]);
printf("%c\n", a[9]);
return 0;
}
///
์ถ๋ ฅ
e
o
l
///
- ์ด๋ ๊ฒ ๋ฌธ์์ด ๋ฆฌํฐ๋ด๋ก ๋ฌธ์์ด์ ์ฌ์ฉํ ๋์ ํน์ง์ ์ธ๋ฑ์ค๋ก ์ ๊ทผ์ ๊ฐ๋ฅํ์ง๋ง, Read-Only๋ผ์ ๊ฐ ๋ณ๊ฒฝ์ ์๋๋ค๋ ๊ฒ์ด๋ค.
3. ๋ฌธ์์ด๊ณผ ๋ฐฐ์ด
- ๋ฐฐ์ด ํํ๋ก ๋ฌธ์์ด์ ์ ์ฅํด์ ์ธ๋ฑ์ค๋ก ์ ๊ทผํ์ฌ ๊ฐ ๋ณ๊ฒฝ๊น์ง ํ ์ ์๋ค.
#include <stdio.h>
int main(void) {
char a[13] = "Hello World";
printf("%s\n", a);
return 0;
}
///
์ถ๋ ฅ
Hello World
///
- ํฌ๊ธฐ๊ฐ 13์ธ charํ ๋ฐฐ์ด์ ์ ์ธํจ๊ณผ ๋์์ ๋ฌธ์์ด์ ํ ๋นํ๊ณ , %s๋ก ๋ฌธ์์ด์ ์ถ๋ ฅํ๋ค.
- ๋ฌธ์์ด ๋ฆฌํฐ๋ด๊ณผ๋ ๋ฌ๋ฆฌ ๋ฐฐ์ด์์ ๊ฐ ํ๋ ํ๋ ๋ง๋ค ๋ฌธ์๊ฐ ์ ์ฅ๋๊ณ , ์ด๋ ๋จ๋ ๊ณต๊ฐ์๋ NULL๋ก ์ฑ์์ง๊ฒ๋๋ค.
- ์ฃผ์ํด์ผํ ์ ์ ๋ฐฐ์ด๋ง ๋จผ์ ์ ์ธ ํ์ ๋ฌธ์์ด ์ง์ ์ ํ๋ฉด ์ผ์ด ๊ณจ์น์ํ ์ง ์ ์๋ค.
#include <stdio.h>
int main(void) {
char a[13];
a[0] = 'H';
a[1] = 'e';
...
return 0;
}
์ด๋ฐ์์ผ๋ก ํ๋ํ๋ ์ง์ ํด์ค์ผํ๊ธฐ ๋๋ฌธ์ด๋ค.
- ๊ทธ๋ฆฌ๊ณ ๋ ์ฃผ์ํด์ผํ ์ ์ ๋ฌธ์ ๋์ NULL๋ก ๋๋๋ ๊ฒ์ ์๊ฐํด์ ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ ํ ๋นํด์ผํ๊ธฐ ๋๋ฌธ์, ์ง๊ธ ์์ ์ ๊ฒฝ์ฐ ์ต์ 12์ฌ์ผํ๋ค๋ ๋ป์ด๋ค. ๋ ์ ์ ํฌ๊ธฐ์ ํ ๋น์ ํ๋ คํด๋ ๋๊ธด ๋๊ฒ ์ง๋ง ์ถ๋ ฅ์ ์ฌ๋ฐ๋ฅด๊ฒ ๋์ค์ง ์์ ๊ฒ์ด๋ค.
- ์ธ๋ฑ์ค ์ ๊ทผ ํ ์์ ์์
#include <stdio.h>
int main(void) {
char a[13] = "Hello World";
a[0] = 'U';
printf("%s\n", a);
return 0;
}
///
์ถ๋ ฅ
Uello World
///