break退出程序 - C ++

时间:2012-11-16 19:47:51

标签: c++

我是C ++初学者,下面的程序非常简单,但我不知道为什么当输入“EXIT”时,程序终止,虽然它应该打印出之前输入的名字!

这是代码:

#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 个答案:

答案 0 :(得分:4)

完成插入后,您需要再次确定集合的开头:

it = myset.begin();

应该在第二个while循环之前。


如果您能够使用C ++ 11功能,请考虑使用基于范围的for循环。请注意,它不需要使用任何迭代器:

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

如果您无法使用C ++ 11功能,请考虑使用常规for循环。请注意,迭代器的范围仅限于for循环:

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

答案 1 :(得分:3)

it = myset.begin();

将此行移至显示名称的循环之前。问题是,如果它在顶部,集合中没有元素,它将获得结束迭代器的值,因此显示循环立即结束。

答案 2 :(得分:0)

第一个while循环执行完毕后,

it == myset.end();计算到true。您需要在循环it = myset.begin();

之间添加这行代码