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를 잘 확인해서 바르게 사용하자.