Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
cin流无限循环,为什么? 我用C++编程语言复制了这个简单的程序,但我不能按要求工作。我错过什么了吗? 基本上,程序会在我点击return后输出“input end”,然后从cin重复输入。它永远无法转到下一个语句。我尝试使用向量(在下面评论了两个语句),同样。在Vc6和vs2008上试用 #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? } #包括 #包括 #包括 #包括 #包括 #包括 使用名称空间std; 地图直方图; 无效记录(常量字符串和s) { 直方图[s]++;//这很奇怪,但它确实有效! cout_C++ - Fatal编程技术网

cin流无限循环,为什么? 我用C++编程语言复制了这个简单的程序,但我不能按要求工作。我错过什么了吗? 基本上,程序会在我点击return后输出“input end”,然后从cin重复输入。它永远无法转到下一个语句。我尝试使用向量(在下面评论了两个语句),同样。在Vc6和vs2008上试用 #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? } #包括 #包括 #包括 #包括 #包括 #包括 使用名称空间std; 地图直方图; 无效记录(常量字符串和s) { 直方图[s]++;//这很奇怪,但它确实有效! cout

cin流无限循环,为什么? 我用C++编程语言复制了这个简单的程序,但我不能按要求工作。我错过什么了吗? 基本上,程序会在我点击return后输出“input end”,然后从cin重复输入。它永远无法转到下一个语句。我尝试使用向量(在下面评论了两个语句),同样。在Vc6和vs2008上试用 #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? } #包括 #包括 #包括 #包括 #包括 #包括 使用名称空间std; 地图直方图; 无效记录(常量字符串和s) { 直方图[s]++;//这很奇怪,但它确实有效! cout,c++,C++,istream\u迭代器将继续运行,直到到达流的末尾,这在cin上通常不会发生 cin将遇到流结束,导致您的语句在重定向到文件时终止(当它到达文件结尾时),或者如果它接收控制台输入,您可以按CTRL-Z(Linux上为CTRL-D,iirc)发送流结束。之后可能需要按enter键 请注意,执行此操作后,cin将不可用,因此在此点之后无法读取更多输入 在遇到流结束之前,ii将保持有效,并继续从流请求更多数据(在这种情况下是控制台) 解决方法是不要对每个都使用,而是手动while循环,当您想要的任何

istream\u迭代器将继续运行,直到到达流的末尾,这在
cin
上通常不会发生

cin
将遇到流结束,导致您的语句在重定向到文件时终止(当它到达文件结尾时),或者如果它接收控制台输入,您可以按CTRL-Z(Linux上为CTRL-D,iirc)发送流结束。之后可能需要按enter键

请注意,执行此操作后,
cin
将不可用,因此在此点之后无法读取更多输入

在遇到流结束之前,
ii
将保持有效,并继续从流请求更多数据(在这种情况下是控制台)


解决方法是不要对每个
都使用
,而是手动
while
循环,当您想要的任何条件得到满足时,您都可以打破该循环。

在发布此问题之前,我尝试按ctrl-Z,但它不起作用。对不起,我再次尝试了,实际上输入后应该是ctrl-Z。谢谢!我对这个问题感到害羞。按Ctrl-Z、Enter键后是否可以恢复可用的cin?