如何使用getline执行最后一行

时间:2014-10-09 19:11:23

标签: c++ getline

我正在尝试使用getline分别从文件中读取每一行,但文件中的最后一行后面没有行终止符号,因此getline不知道它已到达行的末尾。

我正在使用终端来执行程序,使用./evaluation< input0其中input0是输入文件,input0中的最后一行被读入但不执行到代码中。以下是我想要做的事情:

int main( int argc, char** argv ) 
{
    //reading in value from user
    while( 1 )
    {
        //starting output
        cout << "Expression: ";

        string expressionInputs;
        string postfix;

        while( getline( cin, expressionInputs ) )
        {
            break;
        }
        cout << expressionInputs << endl;

        //checks to see if Ctrl+d has been used as input
        if( cin.eof() )
        {
            cout << endl;
            break;
        }
        postfix = infixToPostfix( expressionInputs );
        cout << "Answer: " << postfixToAnswer( postfix ) << endl;
    }   
    return 0;
} 

程序假设读取1 + 2等值并将其转换为后缀(1 2 +),然后评估答案。

1 个答案:

答案 0 :(得分:0)

您正确地解释了std::basic_ios::operator bool()的结果,所以我想知道文件中的最后一行是否为空。在您的程序中,std::getline()返回false时,表示在遇到换行符或EOF之前无法读取任何字符。

请注意,getline()此处返回cin,您的while语句正在评估operator bool()。如果前面的操作失败,operator bool()将返回false,但遇到EOF不足以再次计算失败,在这种情况下,除非在前一行之后没有可用的字符。

您是否有可在此处分享的样本输入文件?