알고리즘/문제해결을 위한 C++ 공부
(3) scanf의 다양한 사용법
Storage Gonie
2019. 4. 18. 17:15
반응형
*scanf는 앞뒤 공백을 무시하므로 한줄 전체를 그대로 받는 데에는 적절치 못하다.
1. 평범한 케이스
int a, b;
scanf("%d%d", &a, &b); // "4 5", "4 5", "4 \n 5 \n" 모두 인식이 가능하다.
2. 문자를 사용한 부분입력 무시
int a, b;
scanf("%d,%d", &a, &b); // "4,5" 만 인식이 가능하며, ','는 구분자 역할만 한다.
scanf("%d:%d", &a, &b); // "4:5" 만 인식이 가능하며, ':'는 구분자 역할만 한다.
printf("%d %d", a, b); // 4 5
3. 별표를 사용한 입력 무시
int a, b;
scanf("%*d %d", &a); // "3 5"를 입력하면 3은 무시되고 5가 a변수로 할당된다.
printf("%d", a); // 5
4-1. 대괄호를 사용한 일부문자 무시(대괄호 안에 나온 문자가 있는 곳까지만 입력을 받음)
char s[15];
scanf("%[abc]", s); // "abcde" -> abc "abecd" -> ab
printf("%s\n", s);
4-2. 대괄호를 사용한 일부문자 무시(대괄호 안에 나온 문자가 없는 곳까지만 입력을 받음)
char s[15];
scanf("%[^abc]", s); // "deaa" -> de "ffaf" -> ff
printf("%s\n", s);
5. EOF까지 입력받도록 할 때 사용할 수 있음
- scanf와 cin 활용가능
int a;
int b;
char s[100];
while (scanf("%[^\n]\n", s) == 1) // scanf는 int를 반환하며 입력받은 원소의 개수를 반환한다.
{
cout << s << endl;
}
while (cin >> a >> b) // 입력받은 a, b의 데이터형이 선언 타입과 일치하면 1, 하나라도 다르면 0을 반환함
{
cout << s << endl;
}
6. 문자를 n개씩 끊어서 읽어들이기
- scanf("%1d", a) 로 입력을 정수로도 읽어들일 수 있음.
char s[100];
while( scanf("%10s", s) == 1) // 한줄의 입력에서 10자씩 계속 읽어들임
printf("%s\n", s);
반응형