私はこの単純なプログラムをC++プログラミング言語からコピーしましたが、希望どおりに動作させることはできません。何か不足していますか? 基本的に、プログラムは "return"を押してから "input end"を出力し、cinからの入力を繰り返します。それは決して次の声明に行くことはできません。私はベクトル(以下の2つのステートメントをコメントしました)を使用しようとしました。 Vc6とvs2008を試してみました。cinストリーム無限ループ、なぜですか?
#include <iostream>
#include <map>
#include <algorithm>
#include <string>
#include <iterator>
#include <vector>
using namespace std;
map<string, int> histogram;
void record(const string &s)
{
histogram[s]++; //this is pretty strange, however it does work!
cout<<"recorded:"<<s<<" occurance="<<histogram[s]<<"\n";
}
void print(const pair<const string,int> &r)
{
cout<<r.first<<' '<<r.second<<'\n';
}
int main()
{
istream_iterator<string> ii(cin);
istream_iterator<string> eos;
cout<<"input end\n";
for_each(ii,eos,record); //this statement cannot get out why? It repeats the keyboard input
//vector<string> b(ii,eos);
//for_each(b.begin(),b.end(),record);
for_each(histogram.begin(),histogram.end(),print); //program never comes here why?
}
実行結果:
ABC
入力端記録
:のoccurance = 1
記録:のBのoccurance = 1
記録:Cのoccurance = 1
記録:1つのoccurance = 1
記録:2のoccurance = 1
記録:それはストリームの終わりに達するまで3のoccurance = 1
この質問を投稿する前にCtrl-Zを押してみましたが、動作しません。 – shangping
申し訳ありませんが、私はもう一度試しましたが、実際にはenterキーを押してください。ありがとう!私はこの質問について恥ずかしがり屋だ。 – shangping
Ctrl-Z、Enterを押した後にcinを使用可能に戻すことは可能ですか? – Karel