[질문]어떻게 된거죠?

ysy의 이미지

#include <stdio.h>
int main(void)
{
int a;
char b;
scanf("%d",&a);
scanf("%c",&b);

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

return 0;
}

위에 코드에서 printf()함수 부분이 제대로 출력이 안되더라구요..
안되는 이유를 알고싶습니다...
메모리 문제인가요..?
맹고이의 이미지

scanf()를 다시 보세요

xyhan의 이미지

아마도 엔터를 문자로 인식하기 때문일껍미다..

scanf("%d",&a);
scanf("%c",&b);
scanf("%c",&b);

scanf를 두번 연달아 씀으로써 해결할수 있지만..
보기는 그리 좋치 않네요..

문자를 먼저 받고 숫자를 받으세요

scanf("%c",&b);
scanf("%d",&a);

============================================================

선한 인간이냐 악한 인간이냐는 그사람의 의지에 달렸다. -에픽테토스-
의지 노력 기다림은 성공의 주춧돌이다. -파스퇴르-

============================================================

ysy의 이미지

그런 이유가 있었네요..
그런데, 왜 그렇게 되는거죠????

정재호의 이미지

터미널이 canonical mode로 운영 되기 때문입니다.
질문하신 프로그램을 실행하기전에
stty -icanon
하신 다음에 실행해 보십시요.
그 상태에서 cat - 해보셔도 차이를 아실 수 있을 겁니다.
terminal 관련 howto에서 canonical, non-canonical 관려 부분을 보시면 이유를 아실 수 있을 겁니다.

ysy의 이미지

감사합니다