Visual Studio로 C/C++ 프로그래밍을 작성하는 입문자들이 간혹 볼 수 있는 에러메시지이다.

원인은 여러 가지가 있겠으나 scanf의 서식 문자열을 잘못 설정했을 때 나타난다.

다음은 문제의 메시지가 나타나는 소스코드이다.

  1 #include <stdio.h>  
  2 #include <stdlib.h>  
  3  
  4 int main(void) {
  5   short x = 0; 
  6  
  7   scanf(" %d", &x); 
  8   printf("%d\n", x); 
  9  
 10   return EXIT_SUCCESS; 
 11 }

뭔가 이상하지 않은가? short도 정수형 변수고 scanf 역시 %d로 잘 받고 있는 것 같은데...

어찌 됐건 문제는 역시 scanf의 서식 문자열이다. detail에 약하면 항상 이런 문제가 생긴다.




위 사진은 www.cppreference.com 의 scanf 부분에서 가져왔다.

자세히 보면 decimal integer를 match 시키더라도 type에 따라 세부적인 서식 문자열이 다르다.

예를 들어 char는 %hhd, short는 %hd, long long은 %lld 

그 외에도 다양한 옵션들이 존재한다. 심심하면 실행해보자.


즉, 위의 잘못된 소스코드는 다음과 같이 수정하면 해결할 수 있다.

  1 #include <stdio.h>  
  2 #include <stdlib.h>  
  3  
  4 int main(void) {
  5   short x = 0; 
  6  
  7   scanf(" %hd", &x); 
  8   printf("%hd\n", x); 
  9  
 10   return EXIT_SUCCESS; 
 11 }


결론-> API Document를 잘 확인해서 바르게 사용하자.