블링블링 범블링

[백.단.풀.1] 그대로 출력하기 (11718) 본문

알고리즘 문제풀이/백준

[백.단.풀.1] 그대로 출력하기 (11718)

뻠스키 2018. 4. 18. 15:56

Step : <입/출력 받아보기>
Title : " 그대로 출력하기 "


시간 제한메모리 제한제출정답맞은 사람정답 비율
1 초256 MB106456226331803125.257%

문제

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

입력

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

출력

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

예제 입력 1 

Hello
Baekjoon
Online Judge

예제 출력 1 

Hello
Baekjoon
Online Judge



이번 문제는 입력 받은 그대로를 출력하는 문제이다.


어려운 문제는 아니지만,

 

 계속 이 렇게 출력형식이 잘못되었다는 문구가 나와서 짜증나는 문제였다 나한테는ㅠㅠ

이게다 내 실력이 부족한 탓이지만..


이 문제를 풀기 위해서는 scanf나 cin으로 접근하면 안된다.

나도 처음에는 scanf와 cin으로 풀려고 이렇게 저렇게 조건 처리를 해봤지만 결국 실패했다..

(혹시 scanf와 cin으로 이 문제 푸는 방법을 아시는 분은 댓글로 좀 가르쳐주세요ㅠㅠ)


그래서 결국 택한 것은 fgets 였다.



fgets 라는 함수는

c의 경우에는 #include <stdio.h>

c++의 경우에는 #include <cstdio>

안에 내포된 함수이다.


기본 로직은  char * fgets ( char * str, int num, FILE * stream ); 이렇게 구성되어 있다.


설명을 간략하게 하자면,

스트림(stream)에서 문자열을 받는다.
스트림에서 문자열을 받아서 (num - 1) 개의 문자를 입력 받을 때 까지나, 개행 문자나 파일 끝(End-of-File) 에 도달할 때 까지 입력 받아서 C 형식의 문자열로 저장한다. 개행 문자는 fgets 로 하여금 입력을 끝나게 하지만 이 문자 역시 str 에 저장한다. NULL 문자는 자동적으로 마지막으로 입력받은 문자 뒤에 붙는다. 

참고적으로 fgets 함수는 scanf 함수와는 달리 오직 개행 문자에 의해서만 입력이 끝나기 때문에 띄어쓰기가 있는 문자열도 입력 받을 수 있다. 반면에 scanf 함수의 경우 개행 문자 뿐만이 아니라 ' ' 와 '\t' 에 의해서도 입력이 끝나기 때문에 띄어쓰기가 있는 문자열은 입력 받을 수 없다. 


즉, scanf와 cin은 띄었쓰기를 입력받지 못하는 반면 fgets는 띄어쓰기까지 입력을 받을 수 있다는 뜻이다.






str

읽어들인 문자열을 저장할 char 배열을 가리키는 포인터.

num
마지막 NULL 문자를 포함하여, 읽어들일 최대 문자 수. 다시 말해 이 값이 10 이면 컴퓨터는 최대 9 문자를 입력 받는다. 

stream
문자열을 읽어들일 스트림의 FILE 객체를 가리키는 포인터. 특히, 표준 입력(stdin) 에서 입력을 받으려면 여기에 stdin 을 써주면 된다. (예를 들어 fgets (str, 100, stdin); 과 같이)








성공적으로 읽어들였다면 함수는 str 을 리턴한다. 
만일 파일 끝에 도달하였는데 아무런 문자도 읽어들이지 않았다면 str 의 내용은 변하지 않고 그 대신 null 포인터가 리턴된다.
또한 오류가 발생해도 null 포인터가 리턴된다. 
feof를 사용해서 파일의 파일 끝에 도달하였는지도 알 수 있다.


성공적으로 읽어들였다면 함수는 str 을 리턴한다. 
만일 파일 끝에 도달하였는데 아무런 문자도 읽어들이지 않았다면 str 의 내용은 변하지 않고 그 대신 null 포인터가 리턴된다.
또한 오류가 발생해도 null 포인터가 리턴된다. 
feof를 사용해서 파일의 파일 끝에 도달하였는지도 알 수 있다.
 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
#define _CRT_SECURE_NO_WARNINGS
 
#include <stdio.h>
#include <malloc.h>
 
char text[101];
 
int main()
{
    while (fgets(text, 101, stdin) != NULL)
        printf("%s", text);
 
    return 0;
}
cs



기억할 스킬 :   " fgets "

Comments