Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

새싹교실/2017/꽃밭/0328: Difference between revisions

From ZeroWiki
No edit summary
No edit summary
Line 40: Line 40:
  세 번째 문자 입력하세요 : c
  세 번째 문자 입력하세요 : c
버퍼는 요런 상태가 되지요.
버퍼는 요런 상태가 되지요.
[[File:buffer1.png|320]]
[[File:buffer1.png|480]]
a, b, c가 나란히 들어가 있는 것이 아니라 사이사이에 엔터(\n)가 들어간 것을 볼 수 있습니다.
a, b, c가 나란히 들어가 있는 것이 아니라 사이사이에 엔터(\n)가 들어간 것을 볼 수 있습니다.
a를 입력하고 누른 엔터, b를 입력하고 누른 엔터가 다 들어간 것이지요.
a를 입력하고 누른 엔터, b를 입력하고 누른 엔터가 다 들어간 것이지요.
그래서 변수 ch2에는 b가 아닌, a를 입력하고 누른 엔터가 들어가는 것입니다.
그래서 변수 ch2에는 b가 아닌, a를 입력하고 누른 엔터가 들어가는 것입니다.
[[File:buffer2.png]]
[[File:buffer2.png|480]]
이 문제를 어떻게 해결해야 할까요?
이 문제를 어떻게 해결해야 할까요?
흠, 엔터를 받아서 어디다 던져 버리면 되지 않을까요?
흠, 엔터를 받아서 어디다 던져 버리면 되지 않을까요?
[[File:buffer3.png]]
[[File:buffer3.png|480]]
  {color:red}'''getchar()'''
  {color:red}'''getchar()'''
함수는 문자 하나를 받는 함수입니다.
함수는 문자 하나를 받는 함수입니다.

Revision as of 13:03, 30 March 2017

수업 내용

과제 리뷰를 하며 아스키코드와 버퍼를 설명했습니다. 그러고나서 이론을 가르쳤습니다.

아스키 코드

0과 1로 동작하는 컴퓨터에게 모든 것은

{color:red}숫자

로 통합니다. 문자도 숫자, 소리도 숫자, 그림도 숫자로 취급해서 다루죠.

그런데 우리는 이미 printf와 scanf를 통해서 문자를 입력받고 출력받고 있습니다. 숫자만을 알고 있는 컴퓨터가 어떻게 문자를 다룰 수 있는 걸까요? Ascii table.png 답은 간단합니다. 문자 하나마다 숫자를 하나씩 매칭하는거죠. 숫자 97은 문자 a이다, 라고 약속을 하는 겁니다. 그런 약속이 모여서 아스키 코드가 되었죠. printf("%c", 숫자)에서 '숫자' 자리에 위 테이블에 있는 숫자를 하나씩 넣어보세요. 그 숫자에 해당되는 문자가 출력될 것입니다.

아스키 코드의 숫자는 0부터 127까지입니다. 그래서 우리가 문자를 출력할 때, 0~127을 벗어나는 수를 넣게 되면 문제가 생기게 되지요(물론 저 범위에서 확장된 확장형 아스키 코드가 있긴 하지만, 그건 지금 얘기하지는 않겠습니다).

문자열 입출력

string을 입력받을 때는 앞에 '&'가 붙지 않습니다. 지금은 요정도만 알아두세요.

문자 입력받기는 까다롭다! 버퍼 알아보기

과제 코드의 일부를 가져와봤습니다.

printf("첫 번째 문자 입력하세요 : ");
	scanf("%c", &ch1);
	printf("두 번째 문자 입력하세요 : ");
	scanf("%c", &ch2);
	printf("세 번째 문자 입력하세요 : ");
	scanf("%c", &ch3);

문자 세 개를 입력받아 ch1, ch2, ch3 변수에 넣고 있습니다. 하지만 이대로는 문자 세 개가 정상적으로 입력되지 않습니다. 바로 버퍼 때문인데요, scanf는 입력을 버퍼에 저장합니다. 그래서 사용자가 이렇게 입력을 하면,

첫 번째 문자 입력하세요 : a
두 번째 문자 입력하세요 : b
세 번째 문자 입력하세요 : c

버퍼는 요런 상태가 되지요. 480 a, b, c가 나란히 들어가 있는 것이 아니라 사이사이에 엔터(\n)가 들어간 것을 볼 수 있습니다. a를 입력하고 누른 엔터, b를 입력하고 누른 엔터가 다 들어간 것이지요. 그래서 변수 ch2에는 b가 아닌, a를 입력하고 누른 엔터가 들어가는 것입니다. 480 이 문제를 어떻게 해결해야 할까요? 흠, 엔터를 받아서 어디다 던져 버리면 되지 않을까요? 480

{color:red}getchar()

함수는 문자 하나를 받는 함수입니다. 이 함수를 이용해서 엔터를 받으면, ch2에는 b가 들어가게 되겠죠. getchar()를 추가해서 다시 코드를 작성해 볼까요?

printf("첫 번째 문자 입력하세요 : ");
	scanf("%c", &ch1); // a 받고,
        getchar();         // 엔터 받아오기
	printf("두 번째 문자 입력하세요 : ");
	scanf("%c", &ch2); // b 받고,
        getchar();         // 엔터 받아오기
	printf("세 번째 문자 입력하세요 : ");
	scanf("%c", &ch3);

이렇게 문제가 해결됩니다.

결론 :

{color:blue}문자나 문자열 입력을 받을 때는 그것이 항상 버퍼에 들어간다는 것을 기억하세요!

반복문 for문

==

과제

현지

혜민

유진

후기