Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

소소한얘기들...

C언어 scanf에서 %d와 %c의 차이 본문

컴퓨터잘사용하기

C언어 scanf에서 %d와 %c의 차이

_bluesky 2020. 9. 18. 16:46

다음 코드를 실행하면 어떻게 될까?

#include <stdio.h>

 

int main(void){

   int a=1;

   while(1){

      scanf("%d",&a);

      if(a==0)

         break;

      printf("%d\n",a);

   }

   return 0;

}

 

이 프로그램은 숫자를 입력하면 그 숫자를 그대로 출력한다. 단, 0이 입력되면 끝난다.

3

3

4

4

0

이렇게 실행된다. 3을 입력하면 3출력, 4를 입력하면 4를 출력한다.

\n 을 출력문에 넣었기 때문에 한줄씩 출력된다.

 

그런데 다음도 똑같을까?

 

int main(void){

   char a='a';

   while(1){

      scanf("%c",&a);

      if(a=='z')

         break;

      printf("%c\n",a);

   }

   return 0;

}

 

위의 코드에서 단지 정수만 문자형으로 바꾼 것이다. 이번엔 문자 z를 입력하면 끝난다.

그런데 결과는?

a

a

 

b

b

 

z

난데없이 한줄이 더 띄어진다. 왜그러지? 숫자입력할 땐 아무 문제 없었는데?

 

C언어에서 scanf() 함수의 특징때문이다. scanf에서 입력을 하고 엔터를 치면 엔터도 버퍼에 들어간다. 그런데 %d로 출력하면 버퍼에 들어간 엔터는 숫자가 아니기 때문에 무시하고 숫자만 잘 출력된다. 그래서 첫번째 코드는 아무 문제 없는거다.

그런데 %c로 출력하면 문자이기 때문에 버퍼에 들어간 엔터도 문자로 인식하여 출력해 버린다. 즉, a입력하고 엔터를 치면 %c 로 인해 a도 출력되고 엔터도 출력된거다. 그래서 한줄 씩 더 떨어지는 효과가 일어난다. 

 

만일 이 경우 숫자처럼 그대로 띄지 않고 출력을 시키고 싶다면? printf("%c",a); 로 수정하면 된다. 이미 입력된 엔터가 자동 출력되니 또 \n를 통해 엔터친 효과를 낼 필요가 없어진것 ^^

 

좀 복잡한 C언어. 하지만 그 특성을 알면 좀더 상세한 프로그래밍이 가능한 언어다.