문제 출처: https://www.acmicpc.net/problem/11718
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함수에 대해 잘 모른다면 아래 글을 참고해보자.
'BOJ' 카테고리의 다른 글
백준 1652번 누울 자리를 찾아라 [C언어] (0) | 2022.09.05 |
---|---|
백준 3273번 두 수의 합 [C언어] (2) | 2022.09.02 |
백준 1358번 하키 [C언어] (0) | 2022.08.30 |
백준 1934번 최소공배수 [C언어] (0) | 2022.08.29 |
백준 3053번 택시 기하학 [C언어] (0) | 2022.08.29 |