2 qq 33555452 qq_33555452 于 2016.03.12 14:29 提问

为什么这个程序while(cin>>name_editor)
c++

我输入
hua
jia
^z

#include<iostream>
#include<string>
#include<vector>
#include<list>
#include<algorithm>
#include<fstream>
#include<iterator>
#include<map>//包含map multimap
#include<set>//包含set multiset
using namespace std;
 void print_multimap(const multimap<string, vector<string> > &multi_work)//输出multimap 
{
    for (multimap<string, vector<string> >::value_type it : multi_work)
    {
        cout << "the editor is " << it.first << "  ";
        stable_sort(it.second.begin(), it.second.end());//加入了一个排序算法
        for (vector<string>::value_type i : it.second)
            cout << i << "  ";
        cout << endl;
    }
}
int main()
{
    multimap<string, vector<string> >multi_work{ { "li",{ "huayuan","xinhua" } } };
    string name_editor;
    string name_work;
    multimap<string, vector<string> >::iterator it = multi_work.begin();
    cout << (*it).first << endl;
    while (cin >> name_editor)
    {
        int temp_int = 0;
        cout << "input n or 0" << endl;
        cin >> temp_int;
        if (temp_int)//加入作者
        {
            insert_iterator<multimap<string, vector<string> >> it = inserter(multi_work, multi_work.end());
            cout << "please input the editor's work" << endl;
            vector<string>vec_temp;
            while (cin >> name_work)//放入作品
            {
                vec_temp.push_back(name_work);
            }

            pair<string, vector<string> > pair_temp;//用插入迭代器赋值进入multimap中
            pair_temp.first = name_editor;
            pair_temp.second = vec_temp;
            *it = pair_temp;
        }

        else
        {//找到这个作者并返回该位置的迭代器
            multimap<string, vector<string> >::iterator it = multi_work.find(name_editor);
            cout << "please input the editor's new work" << endl;
            vector<string>vec_temp;
            while (cin >> name_work)//放入作品
            {
                vec_temp.push_back(name_work);
            }
            (*it).second = vec_temp;

        }
    }
    print_multimap(multi_work);
    cout << "input an editor you want to erase " << endl;
    string name_editor1;
    cin >> name_editor1;
    multi_work.erase(name_editor1);
    cout << endl;
    print_multimap(multi_work);
    system("pause");
}

3个回答

apprentices
apprentices   2016.03.13 11:25
已采纳

你的while循环语句就是说你有一次输入,使得cin语句为真,执行一次循环体,若无输入与则为假,循环体当然不执行,要想结束循环要输入ctrl+c还是别的,记得不是很清楚你查下就可以了

qq_33555452
qq_33555452 请看我的输入
接近 2 年之前 回复
qq_33555452
qq_33555452   2016.03.12 14:33

加一点说明,只输一次这个while循环循环不了,而且cin》name_editor1没输入就直接执行了

Moyiii
Moyiii   2016.03.12 14:44

你好,在我这测试是没有问题的,我觉得可能是你的编译器设置有问题,请设置支持C++ 11标准。

qq_33555452
qq_33555452 我的是vs2015支持c++11
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!