我使用以下循环从控制台读取未知数量的行,但它不起作用。在输入输入后,我按住输入但循环不会停止。
vector<string> file;
string line;
while(getline(cin,line)
file.push_back(line);
答案 0 :(得分:6)
即使您只按下输入,getline
也会评估为真。
您需要将读取string
与空字符串进行比较,如果为真,则将其中断。
vector<string> file;
string line;
while(getline(cin,line))
{
if (line.empty())
break;
file.push_back(line);
}
答案 1 :(得分:1)
尝试:
vector<string> file;
string line;
while( getline(cin,line))
{
if( line.empty())
break;
file.push_back(line);
}
答案 2 :(得分:0)
您应该将文件结尾发送给您的应用程序。在Linux上它是Ctrl-D,在某些Microsoft系统上它可能是Ctrl-Z
您的应用程序应使用eof()
答案 3 :(得分:0)
对于getline
来说很容易,这是其他答案所建议的:
string line;
while(getline(cin,line))
{
if (line.empty())
break;
file.push_back(line);
}
但是对于cin objects
,我找到了一种无需任何破字符的方法。您必须使用相同的变量来cin所有对象。使用后,需要将其设置为默认退出值。然后检查下一个cin之后的变量是否相同。示例:
string o;
while(true){
cin>>o;
if (o.compare("tmp")==0)
break;
// your normal code
o="tmp";
}