scanf는 c언어를 배울 때 처음 배우는 입력 함수이다.
정수 하나를 입력받는다고 하자.
int i;
scanf("%d",&i);
위와 같을 꼴로 int 정수 하나를 입력받을 것이다.
scanf에서 우리가 첫 파라메터로 입력한 값을 형식지정자라고 한다. 이 값을 잘 조정함으로 우리는 다양한 입력을 여러가지 방법으로 받을 수 있다.
예를들어 123456789 라는 입력이 있을 때 이 입력을 9자리의 정수가 아닌 3자리의 정수 3개로 받을 수 있다.
#include <cstdio>
int main(void){
int a,b,c;
scanf("%3d%3d%3d",&a,&b,&c);
printf("a:%d, b: %d, c: %d\n",a,b,c);
}
이때 출력은 다음과 같다.
> a:123, b: 456, c: 789
형식지정자의 형태는 %[*][width][length]specifier 의 꼴이다.
* 사용
* 를 사용하면 입력을 무시할 수 있다.
#include <cstdio>
int main(void){
int a;
scanf("%*d %d",&a);
printf("a:%d\n",a);
}
이 프로그램에 1234 5678 이란 입력을 주면 1234 는 무시되어 a는 5678이 된다.
무시할 글자의 길이를 지정해주면 공백으로 구분되어있지 않은 입력도 일부분만 받을 수 있다.
#include <cstdio>
int main(void){
int a;
scanf("%*3d%d",&a);
printf("a:%d\n",a);
}
이프로그램에 123456을 입력으로 주면 a는 456이 된다.
여기서 "%*3d%d"를 보자. %*3d로 앞3자리를 무시하고 뒤의 %d로 나머지 입력들을 a에 저장하게 된다.
[ ] 사용
[]내부에 있는 문자만 입력으로 처리한다는 뜻이다. 범위를 지정하는것도 가능해서 "%[ A-Za-z0-9]" 와 같이 쓰면 스페이스바, 알파벳 대소문자와 숫자를 처리가능하다.
[^ ] 사용
[]와 반대이다. []내부에 있지 않은 문자만 입력으로 처리한다. "%[^\n]"과 같이 쓰면 스페이스바를 입력하기 전 모든 글자를 입력받을 수 있다.
#include <cstdio>
int main(void){
char* s[30]={0,};
scanf("%[^\n]",s);
printf("string s is : %s",s);
}
이 프로그램에 hello world! 123를 입력하면 string s is : hello world! 123 를 출력한다.
스페이스바를 포함한 입력 모두가 s에 저장된 모습을 볼 수 있다.
더 자세한 내용은 www.cplusplus.com/reference/cstdio/scanf/ 여기서.
'Study > c,c++' 카테고리의 다른 글
비트마스크 (0) | 2021.05.08 |
---|---|
비트 연산 기본 (0) | 2021.05.05 |
c++에서 class의 private 멤버를 일반적이지 않은 방법으로 읽기 (0) | 2021.04.25 |
C/C++서 양수 정수 나눗셈 결과의 올림 구하기 (0) | 2021.03.01 |
댓글