백준 11718 : 그대로 출력하기

황유빈·2024년 7월 1일

문제

입력 받은 대로 출력하는 프로그램을 작성하시오.

입력

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

출력

입력받은 그대로 출력한다.

예제 입력 1 

Hello
Baekjoon
Online Judge

예제 출력 1 

Hello
Baekjoon
Online Judge

풀이

이 문제를 풀이하기 위해서 알아야 할 점으로는
1. 알파벳 소문자, 대문자, 공백, 숫자로만 이루어져 있다.
2. 줄은 주어지지 않는다.
3. 각 줄은 공백으로 시작하지 않고, 공백으로 끝나지 않는다.
우선 while 문을 사용하여 줄을 입력 받고, 1번 조건을 위해 scanf에서 공백을 포함하는 한 줄 전체를 입력 받기 위해서 scanf("%100[^\n]%*c", line)
이때 %*c: 바로 다음 문자 (즉, \n)를 읽어서 무시한다.
*은 해당 입력을 무시한다는 의미이다.
printf("%s\n", line)line 배열에 저장된 문자열을 출력.
\n을 추가하여 각 줄이 개행 문자로 끝나도록 한다.

틀린 예제

  • 개행 문자를 처리하지 못한 경우
#include <stdio.h>

int main() {
    char line[101]; 
    while (scanf("%100[^\n]", line) == 1) { // 개행 문자를 제외하고 읽음
        printf("%s\n", line); 
    }
    return 0;
}
  • 공백을 포함한 문자열을 처리 하지 못한 경우
#include <stdio.h>

int main() {
    char line[101]; 
    while (scanf("%s", line) != EOF) { // 공백을 포함한 한 줄을 읽지 못함
        printf("%s\n", line); 
    }
    return 0;
}

올바른 정답

#include <stdio.h>

int main() {
    char line[101]; 
    while (scanf("%100[^\n]%*c", line) == 1) { 
        printf("%s\n", line);
    }
    return 0;
}
  • scanf 와 printf 를 사용하지 않고 fgets를 사용하여 숫자, 소문자, 대문자를 그대로 문자열로 받아서 출력.
#include <stdio.h>

int main() {
    char line[101]; 
    while (fgets(line, sizeof(line), stdin)) {
        printf("%s", line);
    }
    return 0;
}
profile
초보개발자

0개의 댓글