c언어

[C언어] - 입출력과 제어문자

말 랑 2022. 4. 18. 23:30
728x90

 

 

C언어에서 문자열을 출력하기 위해서 기본적으로 printf() 함수를 사용합니다.

사용 예시는 다음과 같습니다.

#include <stdio.h>

int main()
{
    printf("광고 눌러주세요");
    printf("구글 광고가 돈 더 많이 줍니다.. :)");

    return 0;
}

이에 대한 출력 결과는 다음과 같습니다.

 

그런데 아마도 위의 출력처럼 줄바꿈 없이 출력되는 것을 원하는 사람은 없을 것입니다.

그렇다면 줄바꿈을 하기 위해서는 어떻게 해야 할까요?

제어문자를 사용해서 줄바꿈을 할 수 있습니다.

 

 

 

제어 문자

C언어는 다음과 같은 여러 제어문자를 가지고 있습니다.

제어 문자 설명
\t 탭(tab)위치만큼 이동합니다.
\n 줄바꿈을 실행합니다.
\b 한 칸 왼쪽으로 이동합니다.
\r 맨 앞으로 이동합니다.
\a 벨소리를 냅니다.

 

제어 문자를 사용하는 예시를 확인해 보도록 하겠습니다.

#include <stdio.h>

int main()
{
    printf("광고 눌러주세요\n");
    printf("구글 광고가 돈 더 많이 줍니다.. :)\n");

    printf("블로그\t구독도 좋아요\n");
    printf("시험기d\b간\t너무 힘들어요\n");
    printf("안 부탁드립니다.\r잘\a\n");



    return 0;
}

출력은 아래와 같습니다.

 

 

 

 

정수, 실수, 문자열 출력 - 입출력 변환 문자 사용

이제 다양한 형태의 값을 출력해 보도록 하겠습니다.

 

 

정수 출력 (%d, %o, %x)

정수를 출력할 때에는 %d를 사용하여 출력합니다.

(%d는 10진수, %o는 8진수, %x는 16진수로 출력합니다.)

#include <stdio.h>

int main()
{
    printf("%d\n", 10);

    printf("%d와 %d의 합은 %d입니다.\n", 10, 20, 10+20);

    return 0;
}

 

결과는 다음과 같습니다.

 

 

 

 

혹시 %d를 통해 실수나 문자열을 출력하면 어떻게 될까요?

#include <stdio.h>

int main()
{
    printf("%d\n", 10);//10 출력
    
    
    printf("%d\n", 22.9);//실수의 2진수 표현을 정수로 해석해서 출력 1717986918 출력
    
    printf("%d\n", "A");//문자열의 주솟값이 출력되므로 항상 값이 바뀜
    
    printf("%d\n", 'A');//A의 아스키코드값인 65 출력
    
    printf("%d와 %d의 합은 %d입니다.\n", 10, 20, 10+20);

    printf("%d와 %d의 합은 %d입니다.\n", 10.8, 20.1, 10.8+20.1);
    printf("%d와 %d의 합은 %d입니다.\n", 10.9, 20.1, 10.9+20.1);//합은 0이 출력

    return 0;
}

 

결과는 다음과 같습니다.

 

 

 

 

실수 출력(%f, %lf, %.nlf, 이때 n은 양수)

실수를 출력하는 것은 정수보다 조금 더 복잡합니다.

기본적으로는 %lf를 가장 많이 사용합니다.

%lf를 사용하면 소숫점 6자리(7번째 자리에서 반올림)까지 출력됩니다.

만약 소수점 1자리만 출력하고 싶다면 어떻게 해야할까요?

%.1lf를 사용하면 1자리만 출력됩니다.

 

#include <stdio.h>

int main()
{
    printf("f로 출력하기\n");
    printf("%f\n", 1);
    printf("%f\n", 1.0);
    printf("%f\n", 1.5);
    printf("f로 출력종료\n\n\n");

    printf("lf로 출력하기\n");
    printf("%lf\n", 1);
    printf("%lf\n", 1.0);
    printf("%lf\n", 1.5);
    printf("lf로 출력종료\n\n\n");


    printf(".lf로 출력하기\n");
    printf("%.lf\n", 1);
    printf("%.lf\n", 1.0);
    printf("%.lf\n", 1.5);
    printf(".lf로 출력종료\n\n\n");

    printf(".0lf로 출력하기\n");
    printf("%.0lf\n", 1);
    printf("%.0lf\n", 1.0);
    printf("%.0lf\n", 1.5);
    printf(".0lf로 출력종료\n\n\n");

    printf(".1lf로 출력하기\n");
    printf("%.1lf\n", 1);
    printf("%.1lf\n", 1.0);
    printf("%.1lf\n", 1.5);
    printf(".1lf로 출력종료\n\n\n");


    printf(".-1lf로 출력하기\n");
    printf("%.-1lf\n", 1);
    printf("%.-1lf\n", 1.0);
    printf("%.-1lf\n", 1.5);
    printf(".-1lf로 출력종료\n\n\n");

    return 0;
}

다양한 경우를 해보았습니다.

이때 -1.lf와 같이 -가 붙으면 무시되고 소숫점을 출력하지 않음을 확인할 수 있습니다.

 

 

실수 출력 - 지수 표기법(Exponential notation) - (%le)

실수를 지수 표기법을 사용하여 출력할 수도 있습니다.

다음과 같은 형식입니다.

#include <stdio.h>

int main()
{
    printf("le로 출력하기\n");
    printf("%le\n", 1);
    printf("%le\n", 1.0);
    printf("%le\n", 1.5);
    printf("le로 출력종료\n\n\n");


    printf(".le로 출력하기\n");
    printf("%.le\n", 1);
    printf("%.le\n", 1.0);
    printf("%.le\n", 1.5);
    printf(".le로 출력종료\n\n\n");

    printf(".0le로 출력하기\n");
    printf("%.0le\n", 1);
    printf("%.0le\n", 1.0);
    printf("%.0le\n", 1.5);
    printf(".0le로 출력종료\n\n\n");

    printf(".1le로 출력하기\n");
    printf("%.1le\n", 1);
    printf("%.1le\n", 1.0);
    printf("%.1le\n", 1.5);
    printf(".1le로 출력종료\n\n\n");

    return 0;
}

출력 결과는 다음과 같으며, 이때 정수를 지수 표기법으로 출력하면 이상한 값이 나오는 것에 주의하셔야 합니다.

 

 

 

 

 

문자, 문자열 출력(%c, %s)

C언어에서 문자와 문자열을 출력하기 위해서는 %c(문자), %s(문자열)을 사용해야 합니다.

 

#include <stdio.h>

int main()
{
    printf("c로 문자 출력하기'\n");
    printf("%c\n", 'a');
    printf("c로 문자 출력종료\n\n");

    printf("c로 숫자 출력하기'\n");
    printf("%c\n", 65);
    printf("c로 숫자 출력종료\n\n");

    printf("c로 문자열 출력하기'\n");
    printf("%c\n", "신동훈입니다.");
    printf("c로 문자열 출력종료\n\n");

    printf("s로 문자 출력하기 - segmentation fault'\n");
    //printf("%s\n", 'a');


    printf("s로 숫자 출력하기- segmentation fault'\n\n");
    //printf("%s\n", 1);

    printf("s로 문자열 출력하기'\n");
    printf("%s\n", "신동훈입니다.");
    printf("s로 문자열 출력종료\n\n");

    return 0;
}

결과는 다음과 같습니다.

 

 

 

 


 

 

데이터 입력 -(scanf)

C언어에서 데이터를 입력받은 가장 기본적인 방법은 scanf 함수를 사용하는 것입니다.

 

scanf를 사용할 때는 기본적으로 다음과 같은 형식을 취합니다.

scanf("%d", &a); 

%d : 입력받을 값 타입의 변환 문자(%d의 경우 정수, int)
&a : a는 값을 저장할 변수명, &는 주소 연산자.

 

사용 방식은 다음과 같습니다.

#include <stdio.h>

int main()
{
    int a,b,c,d,e,f,g;
    scanf("%d", &a);

    scanf("%d%d", &b, &c); //연속입력의 경우 입력 문자를 space, tab, 줄바꿈등으로 구분합니다

    scanf("%d  %d", &d, &e);

    scanf("%d  kkkkk  %d", &f, &g);

    printf("a=%d, b=%d, c=%d, d=%d, e=%d, f=%d, g=%d, ",a,b,c,d,e,f,g,h);

    return 0;
}

 

 

 

문자열 입력받을 때 주의사항

우선 문자열을 제외한 정수, 실수, 문자는 모두 입력받을 때 &를 붙여주어 값을 입력받았습니다.

그러나 문자열(char[])은 &를 붙여주지 않습니다.

#include <stdio.h>

int main()
{
    char name[20];
    char * nickName = "ShinD";

    scanf("%s", name);
    //scanf("%s", nickName); -> 오류

    printf("%s\n", name);
    printf("%s\n", nickName);
    nickName = name;
    printf("%s\n", nickName);
    
    //printf("%s\n", name = nickName); -> 오류
    

    return 0;
}

결과는 다음과 같습니다.

 

 

 

728x90