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에 들어가게 된다.
'Codes > C' 카테고리의 다른 글
후배가 질문해서 답하는 글 : 스트림은 왜 쓰는 건가요? (0) | 2018.05.24 |
---|---|
pwnable vulnerable functions (0) | 2018.02.17 |
Linux 의 ELF 실행 과정 (0) | 2018.02.15 |
파도파도 끝이 없는 bss에 대하여 (0) | 2018.02.14 |
random number generation without random(), /dev/urandom (0) | 2018.01.13 |