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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
while(cin>>a)的原理
>>运算符返回的是流对象的引用,那么题目就变成了 while(cin);    这好像有点奇怪,上网找了答案 这是地址http://tech.ddvip.com/2013-11/1385568597206484.html
为什么可以用while(cin)?
转自:http://www.cnblogs.com/propheteia/archive/2012/07/24/2607091.html /** * @brief The quick-and-easy status check. * * This allows you to write constructs such as * "if (!a_stream) ..." a
一个关于while(cin>>d)不得不注意的问题
今天写了一个程序,在指定数组中查找输入键值k所在位置: #include #include "Find.h" using namespace std; const int max_n=10000; int main() { int a[max_n]; int n=0; int d,k; cout<<"输入数组:"<<endl; while(cin>>d) { a[n++]=d;
如何在while(cin>>str)跳出循环后能继续执行程序中其他的输入操作
cin跳出循环后继续输入数据
结束while(cin >> value)
当看《c++ primer》这本书的时候有这样一段示例代码#include <iostream> int main(){ int val,sum=0; while(std::cin>>val){ sum+=val; } std::cout<<"the result is "<<sum<<std::endl; return 0; }当自己在终端调
while(cin>>str)结束的问题
转自http://dreamerate.blogbus.com/logs/4743427.html 有网友问我她写的while(cin>>str)...为何无论如何总是无法结束?其实在你输入完字符串后,键下回车后,再ctrl+Z(windows环境下是ctrl+z,而linux/unix下是ctrl+d)就OK了!至于原因如下:cin是终端输入,也被称之为标准输入(standard i
在while中使用cin>>a 为条件,注意事项
#include using namespace std; int main() { int currVal = 0 , val = 0; if(cin >> currVal) { int cnt=1;//统计次数 while(cin >> val) { if(currVal == val) { cnt++; } else{ cout <<
关于while(geline(cin,s))语句执行解释
public static void main(String[] args) { 作者:StrayWarrior 链接:http://www.zhihu.com/question/27859723/answer/38385260 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 因为回车输入的是一个换行符,相当于另起一行,所以getline()会把
while判断值为cin输入值时,注意调试时要用文件结束符结束循环
例如,while判断值为cin >> currVal,最后在Whie循环结束及if内,打印最后输入的数的个数。但是调试的时候,只按Enter,while循环未跳出,一直处于等待输入值的状态,不会显示黄色行的打印。 通过按文件结束符,然后再按Enter,将跳出while循环,执行黄色语句。 注意:while中cin输入,遇到文件结束符或者输入错误时,才会终止循环。
C++中while(std::cin >> value)的思考
例子: #include int main() { int sum = 0, value = 0; while(std::cin >> value) { sum += value; } std::cout << "sum is " << sum << std::endl; return 0; } 输入运算符( >> )