C언어에서의 기본 입출력 방법을 공부하고, 입력받은 데이터를 가공하여 출력해보자
C언어에서 특정한 변수에 값을 넣기 위해서 scanf()를 사용합니다.
#include <stdio.h>
int main(void) {
int a;
scanf("%d", &a); //a라는 변수에 할당된 값이 없다.
printf("입력한 숫자는 %d입니다.\n", a); system("pause");
return 0;
}
// 출력 오류가 생긴다.
1)vs에서 scanf()는 취약한함수로 분류되어있다. 따라서 _CRT_SECURE_NO_WARNINGS를 적용한다. (취약한걸알지만 무시하고 입력을 받겠다. 라는 의미 )
2)Visual Studio를 제외한 대부분의 IDE에서는 scanf()를 사용해도 컴파일이 진행된다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void) {
int a;
scanf("%d", &a);
printf("입력한 숫자는 %d입니다.\n", a); system("pause");
return 0;
}
1) &는 특정한 변수의 주소를 의미한다. (주소 연산자)
2) 실제로 컴퓨터는 특정한 메모리 주소에 접근하여 데이터를 수정하므로 &를 이용하는 것
3) 그렇다면 메모리 주소에 얼마만큼의 크기로 데이터를 쓸지 결정은 어떻게 할 수 있을까?
이때 사용되는 것이 형식지정자 이다.
1) double형 데이터는 왜 입력을 받을 때 %lf를 사용하고, 출력할 때는 %f를 사용할까?
이유: 입력을 받을 때는 특정 주소에 특정 크기만큼 입력을 수행하지만 출력할 때는 주소가 아닌 값 자체를 출력하므로 구체적인 크기를 지정하지 않아도 된다.
2)% 자체를 문자로 출력하고 싶으면 어떻게 해야 할까?
: %%를 입력하면 %가 출력된다.
1) 실수형을 입력 받아서 소수점 셋째 자리까지 출력하기
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void) {
double a; scanf("%lf", &a);
printf("%.2f\n", a);
system("pause");
return 0;
}
2) 두숫자를입력받아순서바꾸어출력하기
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void) {
int a, b;
scanf("%d %d", &a, &b);
printf("%d %d\n", b, a);
system("pause");
return 0;
}
3) 한자리씩끊어서입력받기
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void) {
int a, b, c;
scanf("%1d%1d%1d", &a, &b, &c);
printf("%d %d %d\n", a, b, c);
system("pause");
return 0;
}
C언어에서 입출력을 수행할 때는 형식 지정자를 따라야하고, printf()는 단순히 데이터를 넘기고, scanf()은 입력 받을 주소를 나타내기 위해 &를 사용한다.