Codes/C

scanf가 씹히는 경우

2018. 10. 16. 09:54



레드벨벳 조이


 C언어로 코딩을 하는 경우 무한루프 ( while (1), for (;;) ) 안에서 scanf() 함수를 호출하여 값을 연속적으로 받고 연산을 하는 경우가 많다. 근데 이 경우에 scanf()가 씹히는 경우가 빈번히 생기는데, 이 때의 해결법을 써보도록하겠다. 


 scanf()가 씹히는 경우는 버퍼에 사용자가 입력한 것이 남아있기 때문이다. %c를 받는 경우엔 \n (0x0a) 도 버퍼에 들어가기 때문에 scanf() 함수에서는 다음 루프를 돌 때 입력받은 값이 \n (0x0a) 된다. 


 이 경우에는 내가 생각한 두 가지의 해결책으로 해결할 수 있다. 


1. scanf() 함수 뒤 getchar() 함수를 사용한다. 

 - scanf() 함수 뒤 getchar() 함수를 사용하면 scanf()를 호출했을때 \n 이 getchar()에 들어가기 때문에 다음 루프의 scanf()에 \n 이 들어가지 않는다. 


2. scanf("%c%c", &buffer, &tmp); 를 이용한다. 

 - \n이 tmp 변수에 들어가게 되어 우리가 넣길 원하는 값이 정확히 buffer에 들어가게 된다.