如何从文件中读取多个表达式?

问题描述:

我有以下代码如何从文件中读取多个表达式?

int main() 
{ 
    Expression* expression; 
    char paren, comma; 
    string program; 

    freopen("input", "r", stdin); 

    while (true) 
    { 
     cout << "Enter expression: "; 
     cin >> paren; 
     expression = SubExpression::parse(); 
     cin >> comma; 
     parseAssignments(); 
     cout << "Value = " << expression->evaluate() << endl; 
     if(cin.eof()) 
      break; 
    } 

    return 0; 
} 

void parseAssignments() 
{ 
    char assignop, delimiter; 
    string variable; 
    int value; 
    do 
    { 
     variable = parseName(); 
     cin >> ws >> assignop >> value >> delimiter; 
     symbolTable.insert(variable, value); 
    } 
    while (delimiter == ','); 
} 

我想从使用CIN只有一个文件中读取多个表达式。无论我把cin.eof()放在while循环中,程序都会再次读入输入,然后崩溃。我也试过cin.peek(),但仍然是相同的输出。建议阅读EOF的方法。

正如前面已经讨论过的无数次,eof()从来没有正确的工具。

你想这样的:

Expression * expression = nullptr; 

for (char paren, comma; 
    std::cin >> paren      && 
    (expression = SubExpression::parse()) && 
    std::cin >> comma      && 
    parseAssignments(); 
    ) 
{ 
    std::cout << "Value: " << expression->evaluate() << "\n"; 
} 

在这里,我们假定这两个parse()parseAssignments()一些回报,这是转换为true成功和false失败(如一个空指针)。

您可能还想插入分隔符与预期一致的检查,例如, paren == '('comma == ','