놀랍게도 scanf에는 리턴값이 있다.
함수가 읽어들여 저장에 성공한 데이터 개수가 반환값이다.
예를들어 위의 경우에는 정수 2개를 b, c 변수에 저장하는데 성공했으므로 리턴값이 2이다.
정수를 입력해야하는데 문자를 입력한 경우 변수 b, c에 저장하는것 둘 다 실패했으므로 리턴값이 0
변수 b에 저장하는 것만 성공했으므로 리턴값이 1
그런데 순서를 바꿔서 a 1 을 입력하면 scanf의 리턴값이 0이다.
이는 변수 b에 저장되지 못한 문자들(개행문자 포함)이 입력버퍼에 남아 그 다음 입력을 방해하니 변수 c에 저장하는 것 또한 실패한 것이다.
이에대한 해결방법 링크 :
'프로그래밍 > C' 카테고리의 다른 글
[ Visual Studio ] CRT 라이브러리로 메모리 누수 탐지하기 (0) | 2022.05.02 |
---|---|
[ C언어 ] realloc은 얼마나 자주 메모리 주소를 옮길까? (0) | 2022.05.02 |
[ C언어 ] scanf 공백 ( 띄어쓰기 ) 포함 원하는 길이 만큼만 문자열 입력 받는 방법. (0) | 2022.04.27 |
scanf , scanf_s " %d "로 정수 입력 받으려다 문자(열)이 잘못 들어왔을 때 무한루프에 빠지는 문제 / 문장 씹히는 문제 해결 (0) | 2022.04.27 |
[ C언어 ] enum 의 활용 + 사용예제 (0) | 2022.04.26 |