在C++中的读取字符串的过程中不能跳出循环的问题;例如下面的程序
#include <iostream>
using namespace std;
int main(){
char ch;
while(cin >> ch){
// something...
}
cout << "跳出while循环" <<endl;
return 0;
}
正常输入一段字符例如:abcdefg +(回车)
实际上程序是不会执行到cout处的,程序一直会在while中循环,即使加上回车结尾。每次回车都是将输入的字符送入缓冲区,并且继续等待下面的输入。所以需要需要借助流结束标志(在windows上为 ctrl+z,linux上为ctrl+d)来结束while。具体需要做如下输入:abcdefg +(回车)+(ctrl+Z) +(回车)这样便可正常的结束while循环;
类似的getline也会有类似的情况,需要在输出的后面增加(回车)+(ctrl+Z) +(回车)结束;
另外,对于getline来说,可以使用下面类似的结构来回避这个问题;
#include <iostream>
#include <string>
using namespace std;
int main(){
string str;
getline(cin,str);
while(str != ""){
// something...
getline(cin,str);
}
cout << "跳出while循环" <<endl;
return 0;
}