입력에서 더이상의 읽을 수 있는 데이터가 존재하지 않을 때 반복문을 종료하기

2022. 12. 20. 17:01백준(c , c++)

728x90

아무것도 입력을 안하고 엔터를 치면 되지 않을까? 라고 생각해 개행문자를 활용하여 반복문을 짜봤다.

하지만 "\n" 도 개행문자로 읽을 수 있는 데이터이다. -->이걸로 반복문을 종료할 수 없다.


우리는 EOF를 활용하면 된다.

EOF는 더 이상 읽을 수 있는 데이터가 없다(입력 끝)라는 것을 알려준다.

콘솔에서 윈도우의 경우 CTRL + Z를 입력해주면 되며 리눅스(유닉스) 계열은 CTRL + D를 눌러주면 된다.

 

1.  scanf로 

while(scanf("%d",&a)!=-1){
printf("%d\n", a);
}

더 이상 읽을 수 없다는 EOF에 도달하면 -1을 반환한다. 

또는

while(scanf("%d",&a)==1){
printf("%d\n", a);
}

지정한 포맷("%d")에 따른 변수가 적절히 들어오면 1을 반환한다.

입력받는 변수의 개수를 반환하는 것이다. 

그래서 1을 반환하면 입력을 계속 받을 수 있도록 한다.

 

2. cin으로

while(!(cin>>a).eof()){
cout>>a;
}

파일의 끝에 도달했는지 여부를 알수 있는 eof()라는 함수가 있다. 파일의 끝에 도달할 경우 참을 반환한다. 

 

 

while(!cin.eof()){
cin>>a;
cout<<a;
}

위와 같이 하면 틀린다.

cin이 파일의 끝에 도달하면 a에는 전에 입력했던 정보가 남아있어서 그게 출력이되고 반복문이 종료되낟.

우리는 입력이 안들어오면 출력도 안되도록 하기 원하므로 이렇게 하면 안된다. 

 

 

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

cin에 무언가 입력이 들어오면 참이 반환된다.

그러다 들어오면 않으면 거짓이 반환되어 반복문이 종료된다. 

728x90

'백준(c , c++)' 카테고리의 다른 글

형변환  (0) 2022.12.26
5597번- 과제 안낸 놈 잡기  (1) 2022.12.23
2562번 최댓값 구하기  (0) 2022.12.23
입출력 속도 향상  (0) 2022.12.19
백준 1008번(출력값의 상대오차 10^-9가 되도록)  (0) 2022.12.19