getchar, scanf("%c")는 흔히 문자를 입력 받을 때 사용한다.
하지만, 처음 사용하는 경우 getchar, scanf("%c")가 정확히 '무엇을 받아오는지' 모르기 때문에 오류가 생기기도 한다.
아래는 흔하게 오류를 발생하는 코드다.
#include<stdio.h>
int main() {
char a, b;
a = getchar();
b = getchar();
printf("%c %c", a, b);
return 0;
}
입력 > a
출력 > a
실행을 하고 a에 입력을 하면 바로 printf가 실행되며 종료된다.
scanf("%c")도 위와 같이 a 입력 후 printf가 실행된다.
#include<stdio.h>
int main() {
char a, b;
scanf("%c", &a);
scanf("%c", &b);
printf("%c %c", a, b);
return 0;
}
입력 > a
출력 > a
이유를 알기 위해서는 getchar와 scanf("%c")가 '무엇을 받아오는지' 알아야 한다.
컴퓨터에는 버퍼(Buffer)라는 놈이 존재한다.
버퍼란 잠깐 사용하는 임시 저장 공간이라고 생각하면 된다.
유튜브 화면에서 버퍼를 쉽게 확인할 수 있는데, 영상을 재생하기 위해 임시로 저장하고 있는 회색 공간이 버퍼다.
그럼 이 버퍼가 왜 우리의 코드를 방해하는 걸까?
getchar(), scanf("%c")
위의 두 함수를 사용하기 위해서는 우리는 단어를 입력하고 엔터를 누른다.
단어를 입력하고 엔터를 누르면, 버퍼에는 단어 + 엔터가 들어가게 된다.
그림으로 보면 저렇게 'a' 와 엔터를 의미하는 \n가 같이 들어 가 있다.
getchar(), scanf("%c")
이 두 함수는 버퍼에서 가장 처음에 있는 데이터를 가져온다.
당연히 Buffer에는 \n만 남게 된다.
#include<stdio.h>
int main() {
char a, b;
a = getchar(); // a를 입력한다.
b = getchar(); // Buffer의 '\n'를 받아온다.
printf("%c %c", a, b); // printf("a \n"); 이 출력된다.
return 0;
}
다시 코드를 보면, a가 Buffer에서 'a'를 꺼냈기 때문에 Buffer에는 '\n'가 남아있는 상태가 되고, b = getchar()를 하면, '\n'이 b로 들어가게 되는 것이다.
따라서, getchar로 문자를 받고 빈 getchar를 쓴다면 '\n'이 빈 getchar로 들어가게된다.
#include<stdio.h>
int main() {
char a, b;
a = getchar();
getchar();
b = getchar();
getchar();
printf("%c %c", a, b);
return 0;
}
입력 > a
입력 > b
출력 > a b
sacnf("%c")를 사용할 때도 똑같이 getchar를 중간에 넣어주면 해결 된다.
#include<stdio.h>
int main() {
char a, b;
scanf("%c", &a);
getchar();
scanf("%c", &b);
getchar();
printf("%c %c", a, b);
return 0;
}
입력 > a
입력 > b
출력 > a b
'메모.' 카테고리의 다른 글
Frida 사용 시 주의 사항. (1) | 2023.03.14 |
---|---|
Visual Studio Code 한글 깨짐 해결 #VSCode (1) | 2022.07.12 |
VMware workstation 15 블루스크린 해결 #System Service Exception (0) | 2022.07.11 |
Windows 11 Git 설치 #GitHub (0) | 2022.07.10 |
Visual Studio Code C/C++ 설치 #VSCode (5) | 2022.07.09 |
댓글