(+) 필요한 헤더 파일 <stdio.h>
#include <stdio.h>
입력 함수 scanf()
C언어에선 기본적인 입력 함수로 scanf()를 지원한다.
scanf()의 기본적인 사용 방법은 다음과 같다.
{1} 일반적인 변수에 입력받기
형식 : scanf("입력 받을 형식", &입력 받을 변수 이름);
예시 :
#include <stdio.h>
int main()
{
int number;
printf("input : ");
scanf("%d", &number);
printf("output : %d\n", number);
return 0;
}
결과 :
여기서 가장 중요한 부분은 scanf()함수 형식에서
입력받을 변수 앞에 Ampersand(&)를 붙인다는 것이다.
'&'의 의미는 그 변수의 주소를 의미하는 것인데
자세한 내용은 변수와 포인터에 관한 포스팅에서 자세히 다루도록 한다.
일단은 scanf()사용시 변수 이름 앞에 '&'를 꼭 붙인다는걸 기억하자!
{2} 문자열 입력받기
형식 : scanf("%s", 입력 받을 변수 이름);
예시 :
#include <stdio.h>
int main()
{
char string[51];
printf("Input string (limits : 50 character) : ");
scanf("%s", string);
printf("output : %s\n", string);
return 0;
}
결과 :
여기서 중요한 부분은 문자열을 입력 받을 땐
Ampersand(&)를 붙이지 않는다는 것이다
이것은 string[51]과 같이 배열로 선언한 변수의 이름은
일반적인 변수의 이름과는 다른 특성을 가지는데
자세한 내용은 포인터에 관한 포스팅에서 하기로 한다.
일단은 scanf()로 문자열을 입력 받을 시 변수 이름만 쓴다는 것을 기억하자!
또 하나는 길이가 51인 배열임에도 limits를 50이라고 말한 것인데
C언어에서 문자열의 맨 마지막엔 \0이라는 문자열의 끝을 알려주는
특수 문자가 꼭 있어야한다. 이것은 입력받을 때 자동으로 넣어주기 때문에
입력받을 한계 (50) + \0 (1개) = 총 길이 (51) 이와 같은 식이 나오게 된다.
따라서 50글자의 문자열을 입력받으려면 길이가 51인 배열이 필요한 것이다.
{3} 서식 문자
자료 타입자료형서식문자설명
| 정수형 | int, short | %d | 10진 정수 |
| %x | 16진 정수 | ||
| %o | 8진 정수 | ||
| unsigned int | %u | 부호 없는 양의 10진 정수 | |
| 실수형 | float | %f | float형 실수 |
| %e | float형 e를 이용한 지수표기법 | ||
| double | %lf | double형 실수 | |
| %le | double형 e를 이용한 지수 표기법 | ||
| 문자형 | char | %c | 문자 1개 |
| char[] | %s | 문자열 |
(+)통합 예제
#include <stdio.h>
int main()
{
int d, x, o;
unsigned int u;
float f, e;
double lf, le;
char c, s[50];
printf("==========Input==========\n");
printf("d : ");
scanf("%d", &d);
printf("x : ");
scanf("%x", &x);
printf("o : ");
scanf("%o", &o);
printf("u : ");
scanf("%u", &u);
printf("f : ");
scanf("%f", &f);
printf("e : ");
scanf("%e", &e);
printf("lf : ");
scanf("%lf", &lf);
printf("le : ");
scanf("%le", &le);
printf("c : ");
scanf("%c", &c);
printf("s : ");
scanf("%s", s);
printf("==========Output==========\n");
printf("d : %d\n", d);
printf("x : %x\n", x);
printf("o : %o\n", o);
printf("u : %u\n", u);
printf("f : %f\n", f);
printf("e : %e\n", e);
printf("lf : %lf\n", lf);
printf("le : %le\n", le);
printf("c : %c\n", c);
printf("s : %s\n", s);
return 0;
}
결과 :
여기서 한가지 짚고 넘어가야 할 것이 있다.
결과에 보면 %c를 입력받는 부분 없이 바로 %s를 입력받은 것을 볼 수 있다.
이런 현상이 일어나는 이유는 입력을 할 때 엔터도 '\n'이라는 문자로
인식되기 때문이다.
우리가 어떤 입력을 하고 엔터를 친다면 %c를 제외하고 컴퓨터는 \n전까지만 읽는다.
하지만 %c에선 \n도 문자이기 때문에 읽어들인다.
따라서 %le에 2.27e-002를 입력한 후 친 엔터가
%c에 입력으로 받아진 것이다.
출력부분에 보면 'c : '이 출력 된 후 한 줄이 띄어진 것이 그 이유이다.



댓글 없음:
댓글 쓰기