본문 바로가기
프로그램 개발

[C언어] printf의 사용법 그리고 주의 사항

by DRIN 2016. 10. 1.

목차

    반응형

    오늘은 출력함수인 printf에 대해서 설명하고자 합니다. 


    전에 사용했던 예시에서는 그저 문자열의 출력만을 위해서 printf를 사용했습니다.

    그러나 printf에는 문자열 출력외에도 다른 많은 기능을 제공합니다.

    printf("HelloWorld!\n");처럼 문자열을 출력할 수도 있고

    printf("1234\n");처럼 숫자를 출력할 수도 있습니다.

    위의 예시는 printf("%d\n",1234);로 표시할수도 있습니다.


    printf("1234\n"); = printf("%d\n",1234); 가 되는데요.

    이 둘은 출력결과는 같지만 서로 다른 타입입니다.

    그저 ""안에 넣었을 경우에는 문자열이 되지만, %d라는 특수문자를 사용했을때에는 문자가 아닌 숫자로써 출력이 되는 것입니다.


    즉, printf("1234\n"); ≠ printf("%d\n",1234); 이렇게 되는 것이죠.

    아직 이해가 안되신다면 다른 예로 설명을 드려보겠습니다.


    printf("3+4\n"); 와 printf("%d\n",3+4);는 과연 같을까요?

    앞에서 다르다했으니 다르겠지요.


    하지만 전의 예시와는 다르게 후자의 예시는 출력결과 또한 다릅니다.

    첫번째의 출력결과는 3+4

    두번째의 출력결과는 7이 출력이 되게됩니다.


    이게 %d를 썼을때와 쓰지않았을때의 차이입니다.

    %d를 가리켜 서식문자(conversion)이라고 부릅니다.

    %d는 정수타입으로 출력이기 때문에 3/2는 1.5가 아닌 1로 출력이 됩니다.

    소수점은 반올림이 아닌 그냥 버림입니다.


    그럼 자신의 이름과 전화번호를 출력하는 명령을 한줄에 작성해볼까요?

    printf("홍길동\n %d-%d-%d\n",010,1234,5678);

    위의 예시처럼 \n같은 이스케이프 시퀀스를 중간에 삽입하는 것도 가능합니다.

    그럼 위의 코드는 맞는걸까요?


    아마 컴파일이 오류가 나오거나 전화번호 010이 의도하지않았던 숫자로 출력이 될겁니다.

    왜 컴파일 오류가 나는 것일까요?


    숫자를 0으로 시작하게되면 컴파일러가 이 숫자는 8진수이구나 라고 인식을 하게됩니다.

    0x는 16진수로 인식을 하구요.

    때문에 멍청한 컴파일러는 유도리가 없기때문에 컴파일 오류를 내거나 8진수로 출력을 하게됩니다.


    0으로 시작하는 숫자는 그냥 문자열로 출력하는 수 밖에 없습니다.

    전화번호는 숫자라기보다는 문자에 가깝기때문에 전부 ""안에 써넣으셔도 무관합니다.


    지금까지 보였던 예시들은 모두 직접 체험해보면서 해보시기바랍니다.

    프로그래밍은 아는 것이 중요한게 아니라 몸에 베어야합니다. 


    그럼 오늘 강좌는 여기까지!

    2016/10/01 - [C 언어] - [C언어] 주석 처리

    2016/09/30 - [C 언어] - [C언어] 함수 그리고 첫 소스코드 분석

    2016/09/30 - [C 언어] - [C언어] C프로그래밍 작업공간 마련 그리고 테스트


    반응형