1. scanf 함수 사용법
printf함수가 모니터를 통한 출력이었다면 scanf함수는 키보드를 통한 입력을 수행합니다. 사용하는 방법은 printf함수와 유사합니다.
scanf() 함수는 입력받을 데이터의 형태를 서식문자로 지정해주고, 입력받은 내용을 저장할 변수를 지정해줍니다. 예제를 보면 쉽게 이해가 될겁니다.
#include <stdio.h>
int main(void)
{
char name[10];
int age;
char address[30];
printf("Your name : "); // 이름을 입력하라는 안내문 출력
scanf("%s", &name); // 문자열을 입력받아서 name에 저장
printf("Your age: "); // 나이를 입력하라는 안내문 출력
scanf("%d", &age); // 형태의 숫자를 입력받아서 age에 저장
printf("Your address: ");// 주소를 입력하라는 안내문 출력
scanf("%s", &address); // 문자열을 입력받아서 address에 저장
printf("Your name is %s, age is %d, address is %s\n", name, age, address);
return 0;
}
출력결과
Your name : Jack
Your age: 20
Your address: Seoul
Your name is Jack, age is 20, address is Seoul
계속하려면 아무 키나 누르십시오 . . .
2. scanf 함수 사용시 주의사항
- 저장할 변수앞 & 연산자
&연산자는 변수의 주소값을 반환시키는 연산자입니다. 예컨데 scanf("%s", &name) 이라 하면 "%s의 자료(문자열)를 입력받아서 변수 name의 메모리 주소를 가지고 저장할 곳을 찾아가란 뜻입니다. 간단하게 name 변수에 대입하라는 말이기도 합니다. & 연산자는 포인터 부분에서 자세하게 다룹니다.
- 띄어쓰기 금지
scanf함수를 쓸 때 띄어쓰기를 하면 안됩니다. 예컨데 특히 위의 예제코드 같은 경우에는 Seoul GangNam 같은 형태로 쓰면 안됩니다.
띄어쓰기를 한 번 넣어보겠습니다.
출력결과
Your name : John Smith
Your age: Your address: Your name is John, age is -858993460, address is Smith
계속하려면 아무 키나 누르십시오 . . .
위와 같이 age, address는 입력할 기회조차도 받지못하고 출력결과도 이상하게 나와버립니다. 이유는 스트림과 버퍼에 대해 알아야 이해할 수 있습니다.
3. 서식문자
서식 문자에 대해서 한 번 정리를 하겠습니다.
서식문자 | 자료형 | 설명 |
---|---|---|
%d | char, short, int | 부호를 가지는 10진수 정수 |
%ld | long | 부호를 가지는 10진수 정수 |
%lld | long long | 부호를 가지는 10진수 정수 |
%u | unsigned int | 부호를 가지는 10진수 정수 |
%o | unsigned int | 부호가 없는 10진수 정수 |
%x | unsigned int | 부호가 없는 10진수 정수 |
%f | float, double | 소수점 방식의 실수 |
%Lf | long double | 소수점 방식의 실수 |
%e | float, double | 지수 방식의 실수 |
%g | float, double | 값에 따라 소수점, 지수 방식 중 선택 |
%c | char, short, int | 정수에 해당하는 ASCII 문자 |
%s | char* | 문자열 |
%p | void* | 포인터 변수의 주소값 |
printf함수에서는 %f, %e, %g가 위와 같이 다른 형태의 출력을 의미합니다. 하지만 scanf함수에서는 셋 모두 float형태의 데이터를 입력받을 때 쓰입니다. 그리고 %lf는 double형 데이터, %Lf는 long double형 데이터를 입력받는데 쓰입니다. 따라서 scanf 함수를 쓸 때, double형 데이터를 원한다면 %f를 쓰면 안되고 꼭 %lf의 형태로 입력을 받아야합니다.
'프로그래밍 언어 > C' 카테고리의 다른 글
(C언어) 13 - 반복문(2) - for (0) | 2020.05.14 |
---|---|
(C언어) 12 - 반복문(1) - while (0) | 2020.05.14 |
(C언어) 10 - 연산자 (0) | 2020.05.14 |
(C언어) 9 - 2진수와 16진수 (0) | 2020.05.14 |
(C언어) 8 -자료형(3) - 형 변환 (0) | 2020.05.14 |