2012-11-16 17 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(); 

は、第二whileループの前に行く必要があります。


C++ 11の機能を使用できる場合は、範囲ベースのforループを使用することを検討してください。それはどんなイテレータの使用を必要としないことに注意してください:

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

あなたがC++ 11の機能を使用できない場合は、forループを定期的に検討してください。イテレータのスコープはループのために制限されていることに注意してください:この行は名前だけを表示するループ前へ

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 - ようこそ。あなたを助けてくれたすべての回答をアップアップ(上向きの三角形をクリック)し、あなたの質問に最もよく答える答えを "受け入れる"(チェックマークをクリック)ことを覚えておいてください。 –

0

it == myset.end();は、最初のループ実行後にtrueと評価されます。ループの間にこのコード行を追加する必要がありますit = myset.begin();

関連する問題