[Code Up] (1079) scanf의 ‘%c’로 char문자를 받을 때 주의할 사항

Date:     Updated:

카테고리:

태그:

C/C++로 풀이했습니다.
출처 : Code Up 문제 풀이. https://codeup.kr/


문제 출처 https://codeup.kr/problem.php?id=1079

image

#include <stdio.h>
#include <iostream>
#include <string>

using namespace std;
int main()
{
    char c;
    while(1)
    {
        scanf(" %c", &c);
        printf("%c\n", c);
        if (c == 'q') break;
    }
}

scanf("%c") char 문자 1 개를 받을 경우, 이 %c는 특별하게 공백 문자, 개행 문자도 저장할 수 있다.

따라서 공백을 무시하기 위해서는 scanf("%d %d")처럼 scanf(" %c")라고 앞에 공백을 써주는 것이 좋다. 왜냐하면 scanf가 %c로 char 한 문자를 받을 때는 공백과 개행문자도 저장이 가능하여 읽어들이기 때문이다. 따라서 앞에 공백을 넣어 “공백 + 문자” 이런 입력 형식으로서, 공백은 공백 자리에 매치 되어 %c에 저장되지 않고 무시되도록 하고, 진짜 문자는 문자 자리에 매치될 수 있도록 해야 한다. 이렇게 scanf 가 %c로 읽어들이는 경우 입력 버퍼를 비우거나 공백이 필요하지 않다면 공백을 어떻게 무시할지에 관한 생각을 꼭 해두어야 한다.

#include <stdio.h>
#include <iostream>
#include <string>

using namespace std;
int main()
{
    char c;
    while(1)
    {
        scanf("%c", &c);
        if (c == ' ') continue;
        printf("%c\n", c);
        if (c == 'q') break;
    }
}

이건 내 풀이였는데, 이렇게 할 필요 없이 그냥 " %c"로 앞에 공백을 주면 됐었다.



🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기

CodeUp 카테고리 내 다른 글 보러가기

댓글 남기기