如何在C ++中检测字符串输入的文件结尾

时间:2015-01-17 17:03:24

标签: c++ string input

//Stores the line
string line;
//create a vector where each element will be a new line
vector<string> v;
int counter = 0;

//While we havent reached the end of line
while (getline(cin, line) && !cin.eof())
 {
    //get the line and push it to a vector
    v.push_back(line);
    counter++;
 for(int i = 0; i <counter; i++)
    {
        cout<<v[i]<<endl;
     }
 }
    return 0;
}

问题是,如果我输入怎么说:

Hello
World (end of file)

输出仅为:

Hello

如果输入

,则不输出世界,只输出Hello和World
Hello
World
(end of file)

很抱歉,如果这是一个非常简单的问题:/但我无法弄明白

1 个答案:

答案 0 :(得分:5)

如果您的行以EOF结尾而没有行尾,则:

while (getline(cin, line) && !cin.eof())

会有getline返回“全部正常”,但由于getline到达文件的实际结尾,cin.eof()也是true,这意味着循环不会处理输入的最后一次。

更改代码,使其完成:

while (getline(cin, line))

一切都会好的。

如果你真的在乎你实际上是在阅读整个文件,并且getline没有因某些任意的其他原因而失败,那么在循环之后使用类似的东西可以确保 - 但我觉得很难想想会发生这种情况......

if (!cin.eof()) 
{
    cout << "Enexpected: didn't reach end of file" << endl;
}