이해할수 없는 scanf함수

gurumong의 이미지

프로그래밍을 하다가 제가 이상한 문제에 맞닥드려는데
제 상식으로는 도저히 이해할수 없네요
문제를 재현해보기 위해서 짧은 코드를 짜보았는데요
(Windows XP에서 Dev-C++을 이용했습니다)

단순하게
s라는 int형의 변수와
p라는 char형의 변수를
scanf함수를 이용해서 입력 받은후 출력하는 코드입니다

입력 예제로 1 k 를 입력한다면 예상했던데로 정상적인 출력 1 k 이 됩니다
그런데 비정상적인 입력인 k k를 입력하면...
상식적으로 이해할수 없는 s와 p에 초기값으로 주었던 97 b가 출력이 됩니다

k k를 입력함으로써 scanf함수가 입력을 아예 받아들이지 않았다는 것인데
왜 이런 결과가 나오는것일까요?

#include <stdio.h>
 
int main(void)
{
    int s='a';
    char p='b';
    scanf( "%d %c", &s, &p);
 
    printf("%d %c", s, p);
    getch(stdin);
 
return 0;
}
카二리의 이미지

scanf는 잘못된 인자가 들어오면 거기서 읽는걸 멈추고 읽은 갯수를 return 합니다.
저기선 2개 모두 성공하면 return 값이 2 한개만 성공하면 1 모두 실패하면 0 입니다.
첫번째로 k가 들어가면 첫번째부터 실패니깐 성공한것 없이 바로 끝나 버립니다.
고로 scanf가 없는것과 같게 되죠.

새 생각 :)

새 생각 :)

gurumong의 이미지

제가 이렇게 멍청하답니다! T.T
scanf가 반환값이 있는지 몰랐었네요
그냥 숫자던 문자던 다 알아서 바꿔서 입력을 받는줄로 알고있었답니다 T.T