본문 바로가기
~2024.10

[c언어] scanf로 변수 초기화를 하면 안 되는 이유

by HJfan 2024. 2. 25.

01. 에러 내용

int num = scanf("%d", &num);
printf("%d\n", num);

 

코드를 간결하게 작성하고 싶은 마음에 상기와 같은 코드를 작성했다.

하지만 위 코드는 잘못된 코드인데, 과연 어느 부분에서 어떤 종류의 에러가 발생할까?

처음 C언어를 배우거나 C언어에 대한 이해가 깊지 않다면, 위 코드의 오류를 한 번에 찾아내기 쉽지 않을 것이다.

 

정답은 논리적 오류이다. 위 코드는 컴파일 시점이나 런타임 시점에 에러를 발생시키지 않는다.

다만, 프로그래머의 의도와 다른 결과(값)를 저장하여 예상치 못한 동작이 발생하는 논리적인 오류가 발생하는 것이다.

예를 들어, num에 정수 10을 저장하기 위해 10을 입력했더라도 num에는 1이라는 정수가 저장된다.

그 이유를 설명하도록 하겠다.


02. 원인 분석 및 설명

원인을 분석하기 위해선 "scanf" 함수에 대한 이해가 필요하다.

scanf 함수는 사용자가 입력한 값을 반환하는 함수가 아닌 입력된 값의 "개수"를 반환하는 함수이다.

scanf("%d", &num);이라는 코드 자체는 사용자의 입력값을 num이라는 변수에 저장하는 코드가 맞지만,

정작 num에는 scanf가 반환하는 1을 저장한 것이다. 따라서 올바르게 수정한 코드는 아래와 같다.

int num;
num = scanf("%d", &num);
printf("%d\n", num);

 

 

 

※ 본 게시물은 신입 개발자가 실시간으로 공부를 하며 정리한 글이기에 다소 부정확한 표현 혹은 틀린 정보가 존재할 수도 있습니다. 잘못된 부분에 대한 피드백은 언제나 환영합니다.