C언어는 자료형에 따른 입력과 출력을 받는 방식이 다릅니다.
출력과 입력에 필요한 것들을 정리 해보려고 합니다.
printf
를 이용해서 변수를 출력하거나 scanf
를 이용해 변수를 입력할 때 형식 지정자를 이용해야 합니다.
%d
: int - 부호 있는 10진 정수
%u
: unsigned int - 부호 없는 10진 정수
%f
: float, double - 부호 있는 10진 실수
%c
: char - 단일 문자 및 부호 있는 10진 정수
%hhu
: unsigned char - 부호 없는 10진 정수
%s
: char[] char배열 - 문자열
%lf
: 해당 형식 지정자는 double
자료형을 scanf
로 입력받을 때 사용합니다.
#include <stdio.h>
int main()
{
int a;
int b;
int c;
a = 10;
b = 20;
c = 30;
printf("a 는 %d이고 b 는 %d이고 c 는 %d입니다.", a, b, c);
// a 는 10이고 b 는 20이고 c 는 30입니다.
return 0;
}
여기서 주의해야 할 점은 변수에 값을 넣은 후 출력하는 경우는 상관없지만,
변수를 선언한 후 아무런 값을 넣지 않고 출력을 하면 알 수 없는 값이 나옵니다.
이 값을 쓰레기 값
이라고 부릅니다.
#include <stdio.h>
int main()
{
float a = 1.3f;
double b = 1.345232;
printf("a 는 %f 입니다.\n", a); // a 는 1.300000 입니다.
printf("b 는 %f 입니다.\n", b); // b 는 1.345232 입니다.
float c = 1.345f;
double d = 1.346;
printf("c 는 %.3f 입니다.\n", c); // c 는 1.345 입니다.
printf("d 는 %.2f 입니다.\n", d); // d 는 1.35 입니다.
return 0;
}
%.3f
는 소수점 3자리까지 %.2f
는 소수점 2자리까지 표시하는 것을 의미 합니다.
d의 경우에 값이 1.346
이 나와야하는데 반올림하여 1.35
가 나옵니다.
컴퓨터는 2진수로 구성되어 있어 소수점인 10진수를 정확하게 표현할 수 없기 때문입니다.
#include <stdio.h>
int main()
{
int a;
printf("정수를 입력하세요 : ");
scanf("%d", &a);
printf("입력받은 정수 : %d", a);
return 0;
}
출력이 printf
라면 입력을 받으려면 scanf
를 해줘야합니다.
scanf로 입력을 받을 때에도 같은 형식 지정자를 사용합니다.
printf와 대부분 동일하지만 예외사항이 한가지 있습니다.
double
의 경우는 출력할때는 %f
를 사용해도 됩니다.
하지만 입력을 받을때는 %lf
를 사용해주어야 합니다.
그렇지 않으면 숫자를 제대로 인식하지 못합니다.
scanf
는 저장할 변수의 앞에 주소값을 나타내는 문자 &
를 붙여야 합니다.
&
가 붙으면 입력받은 값을 저장할 변수의 주소가 됩니다.
예를들면 &a
는 a의 주소값
이지만 a
는 그냥 값입니다.
예외적으로 문자열 배열
의 경우에는 주소값 &
를 써주지 않아도 에러가 나지 않습니다.
#include <stdio.h>
int main()
{
int a;
int b;
printf("정수 a 와 정수 b 입력 : ");
scanf("%d %d", &a, &b);
printf("입력받은 a 와 b : %d %d", a, b);
return 0;
}
Space
키를 사용하여 띄어쓰기에 따라서 값을 받거나
Enter
키를 사용하여 받을 값을 입력 해주어도 됩니다.
최종적으로 값을 입력해줄 때는 Enter
를 사용해야 값이 입력됩니다.
#include <stdio.h>
int main()
{
unsigned char input;
scanf("%hhu", &input); // 입력 받을 때 - 형식지정자 선언, 저장할 주소(&)변수명
printf("%hhu", input); // 출력 할 떄 - 형식지정자 선언, 변수명
return 0;
}
unsigned char
를 입력받을 때는 %hhu로 사용해야 합니다.