[C언어] - 입출력과 제어문자
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;
}
결과는 다음과 같습니다.