Bakjoon Q11721 - C++
Q11721
Problem
알파벳 소문자와 대문자로만 이루어진 길이가 N인 단어가 주어진다.
한 줄에 10글자씩 끊어서 출력하는 프로그램을 작성하시오.
Input
첫째 줄에 단어가 주어진다. 단어는 알파벳 소문자와 대문자로만 이루어져 있으며, 길이는 100을 넘지 않는다. 길이가 0인 단어는 주어지지 않는다.
Output
입력으로 주어진 단어를 열 개씩 끊어서 한 줄에 하나씩 출력한다. 단어의 길이가 10의 배수가 아닌 경우에는 마지막 줄에는 10개 미만의 글자만 출력할 수도 있다.
예제 입력
1
OneTwoThreeFourFiveSixSevenEightNineTen
예제 출력
1
2
3
4
OneTwoThre
eFourFiveS
ixSevenEig
htNineTen
나의 제출
1
2
3
4
5
6
7
8
9
#include<iostream>
using namespace std;
int main(){
char str[11];
while(~scanf("%10s", &str)){
printf("%s\n", str);
}
}
추가 내용
scanf에서 %10s 가 온전히 10개 글자를 입력받았을 때 1을 리턴한다. 입력받지 못하거나 잘못된 형태를 입력받았을 경우에는 다른 값을 리턴. 이를 이용하면 EOF까지 입력받을 수 있다. scanf는 EOF를 만나면 -1를 리턴하는데, ~(비트 부정 단항 연산자)를 이용해 이 리턴값 -1(즉 이진수 상으로 11111….)을 0(0000….)으로 바꿔줄 수 있다. 따라서 EOF만나면 알아서 루프 빠져나오면서 종료
총평
~연산자를 통해 EOF까지 scanf에 깔끔히 넣어주는게 진짜 예술. 더군다나 integer뿐만 아니라 string도 %10s처럼 10개 글자로 끊어서 입력받을 수 있는걸 염두해 두어야한다.