2012-11-16 5 views
5

저는 C++ 초보자입니다. 다음 프로그램은 매우 간단합니다. 그러나 "EXIT"가 입력되면 프로그램이 종료되는 이유를 모르지만 이전에 입력 한 이름을 인쇄해야합니다! 사전에break 프로그램을 종료합니다 - C++

#include <iostream> 
#include <string> 
#include <set> 

using namespace std; 

int main() 
{ 
    set <string> myset; 
    set <string> :: const_iterator it; 
    it = myset.begin(); 

    string In; 
    int i=1; 

    string exit("EXIT"); 

    cout << "Enter EXIT to print names." << endl; 

    while(1) 
    { 
    cout << "Enter name " << i << ": " ; 
    cin >> In; 

    if(In == exit) 
     break; 

    myset.insert(In); 
    In.clear(); 
    i++; 
    } 


    while(it != myset.end()) 
    { 
    cout << *it << " " ; 
    it ++ ; 
    } 

    cout << endl; 
} 

감사 :

여기에 코드입니다. 당신이 당신의 삽입을 완료 한 후

답변

3
it = myset.begin(); 

이동이 줄을 그냥 이름을 표시 루프 전에. 문제는 세트에 요소가없는 맨 위에있는 경우 반복자의 값을 가져 오므로 표시 루프가 즉시 종료됩니다.

+0

감사합니다 :) – Nour

4

다시 집합의 시작을 결정해야합니다

it = myset.begin(); 

는 2 while 루프 전에 이동합니다.


C++ 11 기능을 사용할 수있는 경우 범위 기반 for 루프를 사용해보십시오. 이 모든 반복자의 사용을 필요로하지 않습니다주의 사항 : C++ 11 개 기능을 사용할 수없는 경우

for(auto const& value : myset) 
    std::cout << value << " "; 
std::cout << "\n"; 

은, 루프 일반을 고려하십시오. 반복자의 범위가 루프에 한정되어 있음을 주목하라 :

for(std::set<std::string>::const_iterator it=myset.begin(), end=myset.end(); 
     it != end; ++it) 
    std::cout << *it << " "; 
std::cout << "\n"; 
+0

네, 고맙습니다! – Nour

+0

@ user1830651 - 안녕하세요. 도움이 된 모든 답변에 대해 "upvote"(위쪽을 향한 삼각형을 클릭)하고 질문에 가장 잘 맞는 대답을 "수락"(체크 표시를 클릭하십시오)하십시오. –

0

it == myset.end();은 첫 번째 while 루프가 실행 된 후 true으로 평가됩니다. 이 코드 줄을 루프 사이에 추가해야합니다. it = myset.begin();

관련 문제