입력에서 더이상의 읽을 수 있는 데이터가 존재하지 않을 때 반복문을 종료하기
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 |