我有以下代码
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的方法。
答案 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 == ','
。