c언어 함수에 관한 질문

조회수 421회
#include <stdio.h>

int func(int a, int b)
{
    return a + b;
}

int main()
{
    int a, b, sum;
    sum = func(scanf("%d", &a), scanf("%d", &b));  // 왜 각각의 값이 1로 변하는가

    printf("%d", sum);    // 2 출력

}

sum = func(scanf("%d", &a), scanf("%d", &b)); 을 통해 a와 b에 값을 입력해줘도 함수 func()의 매개변수 a와 b의 값이 둘다 1로 변할까요??

1 답변

  • 좋아요

    1

    싫어요
    채택 취소하기

    서로다른 함수안에서는 지역변수 이름이 같아도 같은 변수가 아닙니다.

    main 함수에서 선언된 int a, b는 main 함수내에서만 존재하는 지역변수입니다.

    반면에 func의 매개 변수 int a, b는 func 함수내에서만 존재하는 지역변수입니다.

    scanf함수는 서식 지정을 해서 키보드로부터 입력을 받을수가 있는데, 이 함수는 서식을 제대로 입력받은 횟수를 반환값으로 반환합니다.

    따라서 정수를 제대로 입력했다면 scanf("%d", &a)의 반환값은 1입니다.

    결국 func(scanf("%d", &a), scanf("%d", &b));은 정수를 두번 제대로 입력했다면 func(1, 1);로 실행한 것과 같습니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 참고로 scanf("%d %d %d", &a, &b, &c);를 실행하고 3개의 정수를 제대로 입력했다면 이때 함수는 3을 반환합니다. 제대로 입력해서 변환서식과 제대로 매칭된 갯수를 반환합니다. 알 수 없는 사용자 2022.8.3 19:13
    • 오호 감사합니다! 저는 sum = func(scanf("%d", &a), scanf("%d", &b)); 이 부분에서 a와 b의 값을 입력하면 그 값이 인자로써 func의 매개변수로 전달될 것이라고 생각을 했었어요..! 다시 곰곰히 생각해보니까 scanf() 함수로는 값이 입력될지라도 매개변수에 전달되는 값은 a의 값이 아니라 scanf()로 입력을 받은 횟수겠군요.. 선태욱 2022.8.5 11:37

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)