在c ++中从控制台读取未知数量的行

时间:2011-11-02 13:17:18

标签: c++ string input iostream

我使用以下循环从控制台读取未知数量的行,但它不起作用。在输入输入后,我按住输入但循环不会停止。

vector<string> file;    
string line;
while(getline(cin,line)
    file.push_back(line);

4 个答案:

答案 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";
}