[C] 백준 11718번 문제, 그대로 출력하기 | 공백 포함한 문자열 입력

BAEKJOON Online Judge – 11718번 문제, 그대로 출력하기

아래와 같은 조건을 주고, 문자 사이 공백을 포함하여야 하고 빈 줄은 주어지지 않으며, 입력 받은 대로 출력하는 문제입니다.

입력은 최대 100줄로 이루어져 있고, 알파벳 소문자, 대문자, 공백, 숫자로만 이루어져 있다. 각 줄은 100글자를 넘지 않으며, 빈 줄은 주어지지 않는다. 또, 각 줄은 공백으로 시작하지 않고, 공백으로 끝나지 않는다.


해답 1

scanf 함수를 통해 공백을 포함하게 입력을 받습니다.

\n(줄바꿈 문자)를 제외한 입력을 받기 때문에, return 입력이 주어질 때까지의 모든 문자(공백 포함)를 모두 입력받습니다. 다만, 입력된 \n은 입력 버퍼에 남아 있기 때문에, getchar 함수를 통해 버퍼에 남아 있는 문자를 비워줘야 합니다. 입력 버퍼를 비우는 방법에 관하여는 아래 블로그에 자세하게 설명이 나와 있으니 참조 바랍니다.

scanf는 입력값이 없을 때 EOF(-1)를 반환하기 때문에 이 값이 나올 때까지 while문을 돌립니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
int main(int argc, const char * argv[])
{
char a[200];
while(scanf(“%[^\n]s”,a)!=1)
   {
      getchar();
printf(“%s\n”,a);
   }
}
cs

 

scanf()를 통한 문자열 입력 제어

  • char a[10];
    scanf(“%[123]s”, a);
    // 입력에 1,2,3 중 하나가 나오지 않을때까지 읽음, 12934를 입력 시, 12만 기억
  • char a[10];
    scanf(“%[^123]s”, a);
    // 입력에 1,2,3 중 하나가 나올 때까지 읽음. 899aa1을 입력 시, 899aa만 기억
  • char a[10];
    scanf(“%10[^\n]s”, a);
    // 입력에 공백을 포함하여 \n(new line)이 나올 때까지 읽으며, Width를 10로 제한.

*scanf를 사용할 때, Field Width를 제한하는 것은 중요합니다.

원문 링크


해답 2

getchar()와 putchar()를 이용하면, 아래와 같이 간단하게 만들 수 있습니다. getchar()를 이용하여 공백 및 \n까지 문자를 하나씩 입력받으며, putchar로 하나씩 프린트합니다.

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
int main(int argc, const char * argv[]) {
    char a = 0;
    while((a = getchar())!= 1)
    {
        putchar(a);
    }
}
cs

참조

댓글 남기기