BOJ

백준 11718번 그대로 출력하기 [C언어]

Sloth Coder 2022. 8. 30. 16:00

문제 출처: https://www.acmicpc.net/problem/11718

 

11718번: 그대로 출력하기

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

www.acmicpc.net

 

 

Sol1) 문자 단위로 입력 받기 + EOF 이용 

#include <stdio.h>

int main() {
    char a;

    while(scanf("%c", &a) != EOF) {
        printf("%c", a);
    }

    return 0;
}

 

Sol2) 문자 단위로 입력 받기 + scanf 함수의 리턴값 이용

#include <stdio.h>

int main() {
    char a;

    while(scanf("%c", &a) == 1) {
        printf("%c", a);
    }

    return 0;
}

 

Sol3) 문자열 단위로 입력 받기 + gets 함수의 리턴값 이용

#include <stdio.h>

int main() {
    char a[101];

    while(gets(a) != NULL) { //gets함수는 char 포인터를 반환, 
        printf("%s\n", a);   //만일 파일의 끝에 도달해 입력을 받지 못했다면 NULL을 반환할 것.
    }

    return 0;
}

 

Sol4) 문자열 단위로 입력 받기 + EOF 이용

#include <stdio.h>

int main() {
    char a[101];

    while(scanf("%[^\n]", a) != EOF) {
        printf("%s\n", a);
        getchar(); // %[^\n]을 사용해 \n이 나올 때까지 입력받고 \n을 버퍼에 남겨두었을 것이므로 제거해준다.
    }

    return 0;
}

 

 

  • 풀이 방향

문제 자체는 간단하지만 여러가지 방법으로 풀 수 있을 것 같다. 핵심은 파일의 끝에 도달했을 때 의도적으로 종료시켜주는 것. 만일 while문을 while(1)로 무한 반복문을 만들어 종료조건을 설정시켜주지 않으면 파일의 끝에 도달했을 때 예상치 못하게 프로그램이 종료되므로 에러가 나게 된다.

 

  • 풀이

문자단위로 입력받을 때와 문자열 단위로 입력받을 때의 가능한 풀이들을 올려 두었다. EOF는 End Of File의 약자로, C언어가 파일의 끝에 도달했을 때 반환하는 -1로 정의된 상수이다.

 

  • 문제에 대한 사견

EOF의 개념과 입력 함수와 버퍼의 작동 원리를 물어보는 문제같았다. 만일 scanf함수에 대해 잘 모른다면 아래 글을 참고해보자.

 

 

https://csloth.tistory.com/10

 

scanf 함수

표준입력(stdin) 스트림으로부터 형식에 맞는 데이터를 읽어 온다. scanf(형식 문자열, 데이터 저장 포인터)를 인수로 갖는다. 형식에 맞는 데이터를 읽어 오는데 성공하면 읽어온 값의 개수를 intege

csloth.tistory.com