백준 11718번 그대로 출력하기 [C언어]
문제 출처: 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함수에 대해 잘 모른다면 아래 글을 참고해보자.
scanf 함수
표준입력(stdin) 스트림으로부터 형식에 맞는 데이터를 읽어 온다. scanf(형식 문자열, 데이터 저장 포인터)를 인수로 갖는다. 형식에 맞는 데이터를 읽어 오는데 성공하면 읽어온 값의 개수를 intege
csloth.tistory.com