관리 메뉴

Storage Gonie

(3) scanf의 다양한 사용법 본문

알고리즘/문제해결을 위한 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);

 

반응형
Comments