예를 들어서
처음에 scanf(\"%d\", &num); 이라는 문장을 만났습니다
그러면 이 함수는 키보드 버퍼로부터 숫자를 읽어들일 준비를 합니다.
입력 버퍼가 비어있기 때문에 scanf는 사용자가 키보드로 값을 입력해서 버퍼에 내용이 들어올 때 까지 기다립니다.
이 때 사용자는 123 을 치고 enter 를 쳤습니다.
이 때, enter를 치기 전에는 입력한 내용이 버퍼에 들어가지 않기 때문에
enter 를 누르지 않으면 scanf 는 계속 기다릴 수 밖에 없습니다.
그러면 입력 버퍼에는 1, 2, 3, enter 가 들어갑니다
scanf 는 입력 버퍼에서 1, 2, 3 을 읽어들여서 num 에 123을 저장하고,
<<<중요>>>> 숫자가 아닌 enter 키는 버퍼에 그대로 남겨둡니다.
그 후 scanf(\"%c\", &ch) 이라는 문장을 만났습니다
scanf는 입력 버퍼로부터 글자 하나를 읽어들일 준비를 합니다.
그런데 이미 입력 버퍼에는 enter 키가 들어있기 때문에
scanf 는 입력 버퍼가 찰 때 까지 기다릴 필요 없이 ch에 enter를 저장하고 나옵니다.
만약 대신에 scanf(\" %c\", &ch) 라고 했다면
scanf는 입력 버퍼로부터 공백 문자를 모두 흡수할 준비를 합니다
따라서 입력 버퍼에 남아있었던 enter 를 흡수하고
데이터가 모두 들어오기 전에 입력 버퍼가 비어버렸으므로
사용자가 키보드로 값을 입력해서 버퍼에 내용이 들어올 때 까지 기다립니다.
여기서 사용자가 n 라고 치고 enter 를 쳤다면
n는 공백문자가 아니기 때문에 n은 흡수하지 않고 ch 변수에 n을 저장합니다.
그리고 enter는 버퍼에 남겨둡니다.
입력 버퍼를 *강제로* 비우는 명령어로 fflush(stdin) 을 쓸 수 있습니다.
Visual C++ 계열에서는 이 방법을 사용할 수 있지만 C 표준이 아니므로 다른 컴파일러에서는 사용할 수 없습니다.
처음에 scanf(\"%d\", &num); 이라는 문장을 만났습니다
그러면 이 함수는 키보드 버퍼로부터 숫자를 읽어들일 준비를 합니다.
입력 버퍼가 비어있기 때문에 scanf는 사용자가 키보드로 값을 입력해서 버퍼에 내용이 들어올 때 까지 기다립니다.
이 때 사용자는 123 을 치고 enter 를 쳤습니다.
이 때, enter를 치기 전에는 입력한 내용이 버퍼에 들어가지 않기 때문에
enter 를 누르지 않으면 scanf 는 계속 기다릴 수 밖에 없습니다.
그러면 입력 버퍼에는 1, 2, 3, enter 가 들어갑니다
scanf 는 입력 버퍼에서 1, 2, 3 을 읽어들여서 num 에 123을 저장하고,
<<<중요>>>> 숫자가 아닌 enter 키는 버퍼에 그대로 남겨둡니다.
그 후 scanf(\"%c\", &ch) 이라는 문장을 만났습니다
scanf는 입력 버퍼로부터 글자 하나를 읽어들일 준비를 합니다.
그런데 이미 입력 버퍼에는 enter 키가 들어있기 때문에
scanf 는 입력 버퍼가 찰 때 까지 기다릴 필요 없이 ch에 enter를 저장하고 나옵니다.
만약 대신에 scanf(\" %c\", &ch) 라고 했다면
scanf는 입력 버퍼로부터 공백 문자를 모두 흡수할 준비를 합니다
따라서 입력 버퍼에 남아있었던 enter 를 흡수하고
데이터가 모두 들어오기 전에 입력 버퍼가 비어버렸으므로
사용자가 키보드로 값을 입력해서 버퍼에 내용이 들어올 때 까지 기다립니다.
여기서 사용자가 n 라고 치고 enter 를 쳤다면
n는 공백문자가 아니기 때문에 n은 흡수하지 않고 ch 변수에 n을 저장합니다.
그리고 enter는 버퍼에 남겨둡니다.
입력 버퍼를 *강제로* 비우는 명령어로 fflush(stdin) 을 쓸 수 있습니다.
Visual C++ 계열에서는 이 방법을 사용할 수 있지만 C 표준이 아니므로 다른 컴파일러에서는 사용할 수 없습니다.
소한ㄴㅇㄹ 대충인터넷보고 글보니까 어느정도이해가는데요 #include <stdio.h>int main(void){ char answer = \'m\'; char guess; int tries = 0; do { printf(\"정답을 추측하여 보시오: \"); fflush(stdin); scanf(\"%c\", &guess);
저건데요 scanf딱 한번쓰거든요 왜그러져
아 fflush(stdin);은 빼고봐주세요
????????????????????? 저 코드면 일단 scanf(\"%c\", &guess); 부분이 오동작할 이유가 없는데;;;; 라고 할줄알았으샘? 즐먹으샘 보니깐 두와일 문 썼내 입력 반복해서 맞을때까지 입력받는 코드인거를 모를줄 알아뜸? 여러번 입력을 받는다는걸 생각하고 다시 후시기바나의 설명을 정독한뒤 즐먹으샘
즐먹으샘!!!!!!!!!!!!!!!!!!!!!!!!
아!!!! ㅋㅋㅋㅋㅋㅋㅋㅋㅋ 감사합니다 말투재밌으시네요
ㄴ즐
ㄴㅋㅋ담에도 갈쳐주세요 원래학교에서 배우는데 놀다가 셤기간이라 폭풍벼락중임 ㅠㅠㅋ