Tôi đã sao chép chương trình đơn giản này từ ngôn ngữ lập trình C++, nhưng tôi không thể làm cho nó hoạt động như mong muốn. Tui bỏ lỡ điều gì vậy? Về cơ bản, chương trình sẽ xuất "đầu vào kết thúc" sau khi tôi nhấn trở lại, và sau đó lặp lại đầu vào từ cin. Nó không bao giờ có thể đi đến tuyên bố tiếp theo. Tôi đã cố gắng sử dụng các vector (nhận xét hai báo cáo dưới đây), giống nhau. Đã thử trên Vc6 và vs2008.vòng lặp vô hạn dòng cin, tại sao?
#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?
}
kết quả Chạy:
abc
cuối đầu vào
ghi: một sự xuất hiện = 1
ghi: b sự xuất hiện = 1
ghi: c sự xuất hiện = 1
ghi: 1 sự xuất hiện = 1
ghi: 2 sự xuất hiện = 1
ghi: 3 sự xuất hiện = 1
Tôi đã thử nhấn ctrl-Z trước khi đăng câu hỏi này, nó không hoạt động. – shangping
xin lỗi, tôi đã thử lại, thực sự là một lần nhập phải theo sau là ctrl-z. Cảm ơn! Tôi cảm thấy ngại ngùng về câu hỏi này. – shangping
Có thể lấy lại cin sau khi nhấn Ctrl-Z, Enter? – Karel