Post

[백준BOJ11718 C++] 그대로 출력하기

[백준BOJ11718 C++] 그대로 출력하기

문제

https://www.acmicpc.net/problem/11718


풀이

  1. EOF 활용

    EOF는 End Of File이란 뜻으로 파일의 끝을 표현하기 위한 상수다. 모든 파일의 끝에는 EOF라는 표시가 있으며, 입력 케이스 개수를 몰라 무한 반복문을 제어할 때 cin.eof()를 사용한다. cin으로 입력 받을 경우, EOF라면 입력이 취소되며 cin.eof()가 true로 반환된다.

    작성하지 않을 경우 출력 초과 라고 나온다.

  2. cin.getline() 활용

    기본 형식은 istream& getline(char* s, streamsize count, char delim)로 한 줄을 읽어와서 문자열에 저장하는 함수이며 ‘\n’을 기준으로 입력을 구분한다.

    s는 입력받을 포인터, count는 최대 문자 수를 의미한다. sizeof 함수로 이용해 입력 받을 char 배열의 크기를 반환한다. 글자수가 100 이하라는 조건이 있어 null 문자 포함 a[101]로 지정했으나, 만약 100보다 크게 입력받을 경우 오버플로우가 발생할 수 있음을 기억해야 한다.


제출

#include <bits/stdc++.h>
using namespace std;

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);

	char a[101];

	while (1) {
		cin.getline(a, sizeof(a));
		if (cin.eof() == 1) break;
		cout << a << "\n";
	}

	return 0;
}

제출했던 오답코드

  • 출력 초과
#include <bits/stdc++.h>
using namespace std;

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);

	char a[101];

	while (1) {
		cin >> a;
		cout << a << endl;
	}

	return 0;
}
  • 출력 형식이 잘못되었습니다.
#include <bits/stdc++.h>
using namespace std;

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);

	char a[101];

	while (1) {
		cin >> a;
		if (cin.eof() == 1) break;
		cout << a << " ";
	}

	return 0;
}

메모

  • 입력 케이스 개수를 몰라 무한 반복문을 제어할 때 cin.eof()를 사용한다는 것을 기억해둔다.
  • cin.getline() 함수도 종종 사용되고 있다. 기억해둔다.
This post is licensed under CC BY 4.0 by the author.