[질문] printf 문에 대한 질문입니다. 이해가가지않네요
글쓴이: prog4444 / 작성시간: 화, 2003/02/04 - 8:33오후
아래 두개의 비슷한 소스를 보면 a/b 의 값을 구하고 몫과 나머지를 출력할때
소스1 에서는 a/b 의 값을 바로 입력했고 소스 2 에서는 미리 문장을 선언하고 그 문장을 사용했습니다 왜 아래와 같은 차이가 나는지 도통 모르겠네요..
소스1
#include <stdio.h> main() { int a,b; printf("Insert number ex(1,2) : "); scanf("%d %d",&a,&b); printf("%d/%d=%f\n", a,b,a/b); }결과 2.1211324(2.0이 딱 안떨어집니다.)
소스 2
#include <stdio.h> main() { int a,b; float c; printf("Insert number ex(1,2) : "); scanf("%d %d",&a,&b); c=a/b; printf("%d/%d=%f\n", a,b,c); }결과 2.00000
Forums:
printf() 같은 경우, 가변 인자(variable length ar
printf() 같은 경우, 가변 인자(variable length argument list)를 받습니다.
이런 함수 같은 경우, integral promotion이 각 인자에 적용되는데,
간단히 말해서, data value가 파괴되지 않도록 data type을 변경하는 것을
말합니다.
예를 들어, char a와 int b를 더하는 식에서, a를 int로 형변환해서
계산해야 제대로 계산이 되겠죠.
따라서
char, short, int는 int로, long int는 long int로,
float, double은 double로, long double은 long double로
형변환됩니다.
그리고, 한 가지 더, printf는 첫번째 인자를 제외하고는 가변 인자기 때문에,
컴파일러가 자동으로 형변환을 해 줄 수가 없습니다.
printf("%d/%d=%f\n", a,b,a/b);
위의 경우 a, b는 전부 정수형입니다. 따라서 a / b의 경우도 int형입니다.
그런데, printf는 "%f"를 해석할 때, int로 들어온(a/b때문에) 값을 "%f"을 보고
double로 해석하려 합니다.
결국, 엉뚱한 해석을 하는 것이죠.
소스 2에서 하신 것처럼 아예 double (또는 float)형으로 쓰시던가 아니면,
강제로 형을 지정해 주어야 합니다.
왜냐하면, (가변 인자라서 인자의 type을 알 수 없으므로) 컴파일러가
형 변환을 해 주지 않기 때문입니다.
즉,
printf("%d/%d=%f\n", a,b, (double)a/b);
으로 해도 됩니다.
자세한 것은 C FAQ를 참고하기 바랍니다.
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
답변감사드립니다. ^^
기본적인 이해가 부족했던거 같네요 답변 감사드리고요 아래 faq 사이트 링크도 더불어 감사드립니다. ^^
댓글 달기