일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 별 찍기 - 11
- 1%d
- 알고리즘 문제풀이
- 비트 코인
- X보다 작은 수
- 시험 성적
- 10817
- 자바스크립트
- 함수 사용하기
- 10871
- 1110
- 평균은 넘겠지
- Remix
- 이더리움
- if문 사용해보기
- 백준
- 그대로 출력하기
- 단계별로 풀어보기
- Baekjoon
- 블록 체인
- 1065
- for문 사용해보기
- 세 수
- 더하기 사이클
- 솔리디티
- 2448
- Dapp
- Mist
- 1546
- 가상 화폐
- Today
- Total
블링블링 범블링
[백.단.풀.1] 그대로 출력하기 (11718) 본문
문제
입력 받은 대로 출력하는 프로그램을 작성하시오.
입력
입력이 주어진다. 입력은 최대 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 "
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
[백.단.풀.2] A+B (1000) (0) | 2018.04.18 |
---|---|
[백.단.풀] 그대로 출력하기2 (11719) (0) | 2018.04.18 |
[백.단.풀.1] We love kriii (10718) (0) | 2018.04.18 |
[백.단.풀.1] 개 (10172) (0) | 2018.04.18 |
[백.단.풀.1] 등록 (7287) (0) | 2018.04.18 |