如何从文件中读取多个表达式?
问题描述:
我有以下代码如何从文件中读取多个表达式?
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 == ','
。