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

时间:2013-05-02 18:24:43

标签: c++ file-io eof

我有以下代码

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的文件中读取多个表达式。无论我在while循环中放置cin.eof(),程序再次读取输入然后崩溃。我也试过cin.peek(),但仍然是相同的输出。建议阅读EOF的方法。

1 个答案:

答案 0 :(得分:1)

正如之前无数次讨论的那样,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 == ','