소소한얘기들...
C언어 scanf에서 %d와 %c의 차이 본문
다음 코드를 실행하면 어떻게 될까?
#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언어. 하지만 그 특성을 알면 좀더 상세한 프로그래밍이 가능한 언어다.
'컴퓨터잘사용하기' 카테고리의 다른 글
한글 워드프로세서에서 자음과 영어 자동고침설정 풀기 (0) | 2021.06.14 |
---|---|
아이폰에서 QR코드 인증 쉽게 하기(위젯 등록까지) (0) | 2021.01.12 |
샤오미 헬로우 솔라 vs 핏빗 charge 비교 (0) | 2020.08.12 |
게시물에 유튜브 영상을 나오게 하고 싶을 때 (0) | 2020.04.13 |
크롬에서 유튜브 알림끄기 (0) | 2020.03.14 |