2022. 2. 9. 16:43ㆍIoT Embeded 강의
#표준입출력 함수
표준입출력 함수는 사용자로부터 입력을 받거나 프로그램 결과를 화면에 출력할 때 사용하는 함수입니다. 매번 사용하는 stdio.h 에 정의가 되어 있으며 대표적으로 출력 함수인 printf()와 입력 함수인scanf(), scanf_s()가 있습니다. 각 함수의 형식과 사용 예시를 정리하겠습니다.
1.printf()
자주 사용하는 출력함수입니다. 형식은 다음과 같습니다.
printf("문자열 ,형식시정자,제어문자", 변수);
먼저 큰 따옴표 안에는 우리가 출력하고 싶은 문자열을 그대로 입력할 수 있습니다. 흔히 아는 Hello world 출력을 할 때 아래와 같이 사용합니다. 함수의 끝에는 항상 세미콜론을 넣어줘서 끝났다는 표시를 해줍니다.
printf("Hello world");
여기서 어떤 변수의 값을 받아 출력하고 싶을 때 다음과 같이 사용합니다.
int x= 10;
printf("%d" , x);
여기서 %d는 서식문자 또는 형식지정자라고 하며 x의 값을 어떻게 출력할지 정해줍니다. 10은 정수형이므로 %d 를 사용하여 10을 그대로 출력하게 합니다. 변수를 여러개 사용 시 형식지정자의 개수, 순서는 변수의 개수, 순서와 일치시켜야 합니다.
int x,y,z;
x=10;
y=20;
z=30;
printf("%d %d %d",x ,y ,z);
제어문자를 사용하여 출력되는 화면에서 줄바꿈, Tab 기능등을 구현할 수 있습니다. 또한 큰 따옴표, 작은 따옴표는 printf함수 내에서 문자열로 인식하지 못하기 때문에 \를 붙여서 구현해줍니다. 제어문자는 \로 시작합니다.
int x,y,z;
x=10;
y=20;
z=30;
printf("%d\n" , x);
printf("%d\n" , y);
printf("%d\n" , z);
문자열과 형식지정자, 제어문자를 이용하여 출력화면을 보다 다양하게 구현할 수 있습니다. 또한 변수를 나열하는 부분에서 변수 대신 상수나 x + y 같이 연산 결과를 넣을수도 있으며 함수를 넣어 함수를 실행시킨 뒤 반환되는 값을 출력할 수 있습니다.
int x,y,z;
x=10;
y=20;
printf("int x= %d, int y = %d, 두 수를 더하면 %d 입니다.",x ,y ,x+y);
2.scanf, scanf_s
일반적으로 scanf 함수를 c언어 입력함수로 많이 사용하지만 visual studio에서는 scanf_s()함수를 사용해야 합니다. scanf 함수를 사용하려면 따로 작업을 해줘야합니다. 여기서는 scanf_s로 입력함수를 정리하겠습니다. 형식은 다음과 같습니다.
scanf_s("형식지정자", &변수, 변수 자료형의 크기);
여기서 변수에 사용자가 입력하여 데이터를 저장하게 됩니다. 변수 앞에는 &를 붙여줍니다. 변수 자료형의 크기는 정수, 실수형 입력을 받을 때 생략가능합니다. 형식지정자는 뒤의 변수와 대응되어 입력받는 변수를 어떻게 표현하여 컴퓨터가 읽을 것인지 정해줍니다. 만일 사용자가 4.1545를 입력했는데 형식지정자가 정수형인 %d라면 컴퓨터는 그것을 4로 받아들입니다. 사용예시를 정리하겠습니다.
int x1;
printf("정수 1개를 입력하세요:");
scanf_s("%d", &x1);
printf("첫번째 입력값은 %d\n", x1);
x1에 10을 입력 시 화면에 "첫번째 입력값은 10"이라고 출력이 나옵니다. 즉,x1이라는 변수에 사용자가 입력한 10이 대입되고 printf함수에서 x1을 이용해 다시 출력합니다.
int x, y, z;
printf("정수 3개를 입력하세요:");
scanf_s("%d %d %d", &x, &y, &z);
printf("첫번째 입력값은 %d\n", x);
printf("두번째 입력값은 %d\n", y);
printf("세번째 입력값은 %d\n", z);
형식지정자와 변수를 여러 개 사용할 수 있습니다. 입력 시 수를 하나씩 입력하고 엔터를 치거나 스페이스로 공백을 주며 3개를 연속으로 기입한 뒤 엔터를 치셔도 무방합니다.
char c_input;
printf("input char>");
getchar();
scanf_s("%c",&c_input, sizeof(c_input));
printf("char = %c\n", c_input);
문자형을 입력받아 그대로 출력하는 코드입니다. 문자 a를 입력하면 그대로 a가 출력됩니다. 형식지정자%c는 문자형을 받는 형식지정자입니다. sizeof(c_input)은 생략가능합니다. 여기서 getchar();는 사용자가 값을 입력 시 엔터를 누르게 되는데 이 엔터 또한 하나의 문자형 값이므로 c_input에 엔터가 들어가게 됩니다. 이를 방지하기 위해 사용하는 함수입니다. getchar()가 없으면 출력화면은 엔터에 의해 항상 공백이 나옵니다.
char c_string[20]; // 길이가 20인 배열 선언
printf("input string>");
scanf_s("%s", c_string, sizeof(c_string)); //문자열을 입력받을 때는& 를 붙이지 않는다.
printf("string = %s\n , size of string = %d\n",c_string, sizeof(c_string));
문자열을 입력받아 출력하는 코드입니다. 먼저 문자열이 들어갈 배열을 선언해준 뒤 그 안에 문자형 여러 개를 입력받습니다. 여기서 주의할 점은 변수입력 구간에 배열을 넣을 때는 &를 붙이지 않는 것입니다. 또한 변수 자료형의 크기를 넣어줘야 합니다. sizeof(c_string)는 c_string 배열의 크기를 나타냅니다(여기서는 20입니다). program 을 타이핑 한 후 엔터를 치면 program 이 출력됩니다. 만약 문자열이 20개를 넘는다면 출력화면은 오버플로우에 의해 공백이 나오게 됩니다.
ex ) alskdjflasdkjgajsddga 입력 시 공백 출력
'IoT Embeded 강의' 카테고리의 다른 글
제어문자 (0) | 2022.02.10 |
---|---|
상수, 기호 상수 (0) | 2022.02.10 |
서식문자 (0) | 2022.02.09 |
C언어 기본 구조와 통합개발환경(IDE) (0) | 2022.02.09 |
변수, 자료형, 식별자, 전역/지역 변수 (0) | 2022.02.09 |