我正在使用以下循环从控制台读取未知数量的行,但是它没有起作用。在输入完成后,我一直按回车键,但是循环不会停止。
vector<string> file;
string line;
while(getline(cin,line)
file.push_back(line);
vector<string> file;
string line;
while(getline(cin,line)
file.push_back(line);
因为即使你只按下回车键,getline
函数也会返回true。
你需要将读取到的string
与空字符串进行比较,并在结果为真时跳出循环。
vector<string> file;
string line;
while(getline(cin,line))
{
if (line.empty())
break;
file.push_back(line);
}
尝试:
vector<string> file;
string line;
while( getline(cin,line))
{
if( line.empty())
break;
file.push_back(line);
}
getline
很容易,正如其他答案所建议的:
string line;
while(getline(cin,line))
{
if (line.empty())
break;
file.push_back(line);
}
但是对于cin对象
,我发现了一种不需要任何断点字符的方法。你必须使用同一个变量来cin所有的对象。使用完毕后,需要将其设置为默认退出值。然后检查下一个cin后变量是否相同。例如:
string o;
while(true){
cin>>o;
if (o.compare("tmp")==0)
break;
// your normal code
o="tmp";
}
你应该向应用程序发出文件结束的信号。在Linux上,它是Ctrl-D,在某些Microsoft系统上可能是Ctrl-Z。
而且你的应用程序应该使用eof()
来测试文件结束条件。