내가 while(cin >> word) { cout << word }
프로그램을 사용할 때 하나씩 모든 단어가 나옵니다. 그러나 나는 이유를 이해할 수 없다. int를 사용할 때 루프를 끝내기 위해 i ++와 같은 것을 씁니다. 내 질문은 프로그램이 다음 단어를 쓰는 것을 어떻게 알고 처음 단어를 반복해서 쓰지 않는가?프로그램에서 새 문자열을 계속 사용하는 것을 어떻게 알 수 있습니까?
답변
cin >> word
은 두 가지 별도의 작업을 수행합니다. 입력에서 단어를 읽고 (cin
의 상태 변경) 성공했는지 여부를 알려줍니다 (그래서 루프는 종료 시점을 알고 있습니다). 다음 번에 루프 cin
은 이미 읽은 것을 알고 다음으로 넘어갑니다.
그래서 부작용이있는 함수입니다. 결과를 반환 할뿐만 아니라 시스템의 상태도 변경합니다. 이것에 대한 두 가지 견해가 있습니다 - 코드를 어렵게 만드는 것은 매우 나쁜 생각입니다. 간단하지만 강력한 코드를 작성하는 데 매우 유용합니다. 둘 다 어느 정도 사실입니다.
이 경우 쉽게 읽을 수있는 (그러나 여전히 올바른) 대안은 무엇입니까? – sepp2k
나는 여기서 좋은 대안을 발견하지 못한다. 우리는 그것을 훨씬 더 복잡하게 만들 필요가있다. 그러나 일반적으로 iostreans 및 C++은 일반적으로 부작용을 받아들이는 경향이 있습니다. 여기 나는 그것이 무해하다고 생각한다; 더 복잡한 경우에 문제를 일으킬 수 있습니다. –
@sepp, 이것은 읽기가 쉽습니다. 'while (condition)'은 모든 프로그래머가 알고있는 구조들 사이에 있어야합니다. ''while (stream >> 변수) '관용구에 익숙하지 않다면 익숙해지기에 이제는 매우 간결하고 튼튼합니다. –
루프의 반복마다 조건 cin >> word
이 실행되기 때문에. 따라서 cout 문이 실행되기 전에 cin 문이 실행되고 word
을 현재 입력 된 문자열로 설정합니다.
- 1. HTML 코드가 새 줄을 만드는 것을 어떻게 알 수 있습니까?
- 2. iframe의로드가 완료된 것을 어떻게 알 수 있습니까?
- 3. 어떻게 질의가 낯설다는 것을 알 수 있습니까?
- 4. 페이지가 재개되는 것을 어떻게 알 수 있습니까?
- 5. JS에서 유효한 것을 어떻게 알 수 있습니까?
- 6. 신청서가 닫힌 것을 어떻게 알 수 있습니까?
- 7. C# 응용 프로그램에서 사용하는 DLL을 어떻게 알 수 있습니까?
- 8. TCP 소켓이 모든 것을 읽은 것을 어떻게 알 수 있습니까?
- 9. Google api를 사용할 수 있다는 것을 어떻게 알 수 있습니까?
- 10. QTableWidget에서 셀 편집을 끝내라는 것을 어떻게 알 수 있습니까?
- 11. while 루프가 종료되지 않는 것을 어떻게 알 수 있습니까?
- 12. 인수가 배열이 아닌 객체 여야한다는 것을 어떻게 알 수 있습니까?
- 13. 사용자가 이미 Facebook에 로그인 한 것을 어떻게 알 수 있습니까?
- 14. 멀티 스레딩이 내 프로그램에 도움이된다는 것을 어떻게 알 수 있습니까?
- 15. Google은 내가 아직 로그인 한 것을 어떻게 알 수 있습니까?
- 16. 입력란에 문자가 입력 된 것을 어떻게 알 수 있습니까?
- 17. 소켓을 사용하여 UDP로 서버가 닫혔다는 것을 어떻게 알 수 있습니까?
- 18. PHP가 새로운 세션을 시작한다는 것을 어떻게 알 수 있습니까?
- 19. 링크가 발견 된 것을 어떻게 알 수 있습니까?
- 20. 내 코드에서이 'System.ObjectDisposedException?'을 트리거하는 것을 어떻게 알 수 있습니까?
- 21. 이 사이트는 다른 탭을 여는 것을 어떻게 알 수 있습니까?
- 22. 삽입 쿼리가 성공적으로 완료되었다는 것을 어떻게 알 수 있습니까?
- 23. 웹 브라우저에서 사용자가 페이지를 수정했다는 것을 어떻게 알 수 있습니까?
- 24. 카메라가 어떤 응용 프로그램에서 실행되고 있는지를 어떻게 알 수 있습니까?
- 25. 소켓 클라이언트의 연결이 끊어 졌다는 것을 어떻게 알 수 있습니까?
- 26. EntityManager가 죽었다는 것을 알 수 있습니까?
- 27. 표시된 이미지가 캐싱 된 것을 어떻게 알 수 있습니까?
- 28. 프로그램이 어떻게 출력이 리디렉션되는 것을 알 수 있습니까?
- 29. 몽고와의 연결이 재개 된 것을 어떻게 알 수 있습니까?
- 30. pygtk glib.timeout_add() : 타이머가 파괴되지 않는 것을 어떻게 알 수 있습니까?
'while' 루프가 무엇인지 모르는 경우에는 C++의 입문서를 읽어야합니다. –