为什么会是死循环呢???求助各位牛人!!
做C++primer第四版上的一个例题,统计ff、fl、fi的出现次数,小弟的程序,在命令提示符里一次性输入
fff,然后回车,然后CRTL+Z,然后再回车,就死循环了。debug一下更加觉得莫名其妙,求助各位大神!!
using namespace std;
char ch;
int cnt_ff=0,cnt_fl=0,cnt_fi=0;
while(cin>>ch){
while(ch=='f'){
if(cin>>ch){
switch(ch){
case 'f':
++cnt_ff;
break;
case 'l':
++cnt_fl;
break;
case 'i':
++cnt_fi;
break;
default:
int i=0;
i++;
}
}
}
}
cout<<"ff: "<<cnt_ff<<endl;
cout<<"fl: "<<cnt_fl<<endl;
cout<<"fi: "<<cnt_fi<<endl; 求助
[解决办法]
#include <iostream>
using namespace std;
int main()
{
char ch;
int cnt_ff=0,cnt_fl=0,cnt_fi=0;
while(cin>>ch)//一次只能输入一个字符,然后回车,结束用Ctrl+Z
{
switch(ch)
{
case 'f':
++cnt_ff;
break;
case 'l':
++cnt_fl;
break;
case 'i':
++cnt_fi;
break;
default:
break;
}
}
cout<<"ff: "<<cnt_ff<<endl;
cout<<"fl: "<<cnt_fl<<endl;
cout<<"fi: "<<cnt_fi<<endl;
return 0;
}
#include <iostream>
int main(){
using namespace std;
char ch;
int cnt_ff=0,cnt_fl=0,cnt_fi=0;
while(cin>>ch){
while(ch=='f'){
if(cin>>ch){//问题出在这一句,当你输入fff回车后,开始循环,将3个f从流中取完后,
//你又开始输入,这时你输入了一个^Z也就是流结束,但此时你上面while里
//的条件是为真的,就不停循环下去了,cin一直处在结束状态,不能接收字符
switch(ch){
case 'f':
++cnt_ff;
break;
case 'l':
++cnt_fl;
break;
case 'i':
++cnt_fi;
break;
default:
int i=0;
i++;
}
}
}
}
cout<<"ff: "<<cnt_ff<<endl;
cout<<"fl: "<<cnt_fl<<endl;
cout<<"fi: "<<cnt_fi<<endl;
}