인프런 커뮤니티 질문&답변

leesiwon0305님의 프로필 이미지
leesiwon0305

작성한 질문수

홍정모의 따라하며 배우는 C언어

5.5 나누기 연산자

5.5 나누기 연산자

작성

·

202

1

안녕하세요. 강의 뒷 부분의 설명을 듣고 자료형이 다른 것끼리는 곱셈이나 나눗셈을 할 수 없지만 컴파일러가 내부에서 자료형을 맞추어주어 제대로 연산 결과가 출력된다고 이해했습니다.

그래서 printf("%f\n", 9.0 / 4); 를 하였을 때 4라는 int형이 double로 변환되어 2.250000이라는 결과가 출력됩니다.

그런데 printf("%d\n", 9.0 / 4); 로 하여 출력해보니 0이라는 결과가 나옵니다. 설명대로라면 %d로 바꾸었을 때 2가 출력되어야 하는것이 아닌가요??

답변 1

1

안녕하세요, 답변 도우미 Soobak 입니다.

printf() 함수의 서식지정자 %dint 자료형에 대응되므로, double 자료형인 9.0 / 4 에 대해서는 자료형 불일치로 올바르지 못한 값이 출력되는 것입니다.

int 로 형변환된 값을 확인하고 싶으신 것이라면,

printf("%d\n", (int)(9.0 / 4));

와 같이 값을 명시적으로 int 로 형변환해주어야 합니다.

위 코드를 실행해보시면, 올바르게 2 가 출력됩니다.

leesiwon0305님의 프로필 이미지
leesiwon0305
질문자

그러면 9.0(double) 과 4(int) 에 대한 자료형을 생각하여 형식 지정자를 정하는 것이 아니라, 연산 후의 자료형에 맞추어 printf 함수 내부에 들어가는 형식 지정자를 정해야 하는건가요?

안녕하세요, 답변 도우미 Soobak 입니다.

네, 맞습니다.

printf() 함수의 서식 지정자는 해당 인수의 실제 자료형에 맞게 선택되어야 합니다.

예를 들어, 9.0 / 4 연산의 경우 연산 후 결과의 자료형이 double 이 되므로, 연산 결과를 printf() 로 출력할 때 %f 서식 지정자를 사용해야 합니다.

leesiwon0305님의 프로필 이미지
leesiwon0305

작성한 질문수

질문하기