scanf 와 버퍼,메모리
다음과같은 코드를 한번 보자.
문자열 input에는 문자열이 잘입력되었지만 문자 input은 내가 문자를 입력 하기도전에 실행되지 않아버렸다.
이번엔 이런 코드를 한번 보자
이번에는 문자열 input에 문자열이 잘입력되고, 문자열 input2에도 입력이 잘 되었다.
왜이런 것일까??
그 이유는 다음과 같다.
그렇다면 해결책은 무엇일까??
그렇다 버퍼의 \n을 없애주자.
그렇다면 버퍼를 어떻게 비워주면 될까??
이는 getchar를 통하여 해결하면 된다.
getchar
getchar는 버퍼
에 있는 문자 한개를 읽어오는것이다.
보통 우리가 콘솔에 입력한것이 버퍼로 가서 이를 읽어오는 방식을 이용한다.
간단한 예제는 다음과 같다.
이를 이용하여 버퍼를 비우는 함수를 만들어 보겠다.
getchar를 이용한 flush(버퍼 비우기) 함수 만들기
우리는 앞서 scanf 로 문자열을 받을때 endline을 의미하는 \n을 버퍼에서 없애버리고 싶다.
이는 다음과같은 코드로 진행 가능하다.
따라서 앞서 예제의 결과는 다음과같이 하면 깔끔히 해결된다.
'언어 > c' 카테고리의 다른 글
문자열이 scanf를 통하여 초기화 될시 남는 배열은 어떻게 될까? (0) | 2018.01.26 |
---|---|
(예외처리)입력 상황에 따른 예외처리 (숫자에 문자가..? 문자에 숫자가..?) (0) | 2018.01.26 |
c_복습(4) 데이터_상수_입출력_조건연산자 (0) | 2018.01.25 |
c_복습(3) 연산자 우선순위_문자열_헤더파일_명령문 (0) | 2018.01.24 |
c_복습(2)_c언어의 특징 (0) | 2018.01.24 |