我正在尝试使用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 +),然后评估答案。
答案 0 :(得分:0)
您正确地解释了std::basic_ios::operator bool()
的结果,所以我想知道文件中的最后一行是否为空。在您的程序中,std::getline()
返回false时,表示在遇到换行符或EOF之前无法读取任何字符。
请注意,getline()
此处返回cin
,您的while
语句正在评估operator bool()
。如果前面的操作失败,operator bool()
将返回false,但遇到EOF不足以再次计算失败,在这种情况下,除非在前一行之后没有可用的字符。
您是否有可在此处分享的样本输入文件?