我如何把它变成一个循环?

How do I turn this into a loop?

我是 c++ 的新手,正在尝试将以下语句转换为从文件中读取的表达式循环。当我从终端提供输入时,以下系列语句工作正常:

int main()
{
    Expression* expression;
    char paren, comma;
    cout << "Enter expression: ";
    cin >> paren;
    expression = SubExpression::parse();
    cin >> comma;
    parseAssignments();
    cout << "Value = " << expression->evaluate() << endl;

    return 0;
}

但是我不想从 cin 中传递表达式,我必须在终端输入它,我想逐行读取文件并将其传递到程序中(在换行符处终止)特点)。

我已尝试执行以下操作,但程序被锁定在 cin。关于如何修改我的代码以执行此操作的任何建议?

int main()
{
    ifstream inFile;
    inFile.open("input.txt", ifstream::in);

    string line;
    while(inFile.good()) 
    {
       Expression* expression;
       char paren, comma;
       cin >> line;
       paren = line[0];
       expression = SubExpression::parse();
       cin >> line;
       comma = line.back();
       parseAssignments();
       cout << "Value = " << expression->evaluate() << endl;
    }

    inFile.close();
}

你可以使用旧式 C 风格

FILE *fp = fopen("file.txt", "r");
char buffer[5000];
while(fgets(buffer,5000,fp) != NULL){
//do something with line 'buffer'
}
fclose(fp);

Ps:抱歉,我在移动设备上回答简短问题

另外,根据您的 OS,fgets 可能会在读取每一行后将新行字符包含在缓冲区中。

cin 从通常是终端的标准输入读取。要从文件中读取,您需要在使用 cin.

的地方使用 inFile 变量

您想从文件中读取,所以使用 inFile 而不是 cin

int main()
{
    ifstream inFile;
    inFile.open("input.txt", ifstream::in);

    string line;
    while(inFile.good()) 
    {
       Expression* expression;
       char paren, comma;
       inFile >> line; // change this line
       paren = line[0];
       expression = SubExpression::parse();
       inFile >> line; // change this line
       comma = line.back();
       parseAssignments();
       cout << "Value = " << expression->evaluate() << endl;
    }

    inFile.close();
}

假设您有一个名为 input.txt 的文件,请尝试以下代码:

#include<iostream>
#include<string>
#include<fstream>

int main()
{
    std::ifstream fin("input.txt",std::ifstream::in);
    std::string line;

    while(getline(fin, line))
    {
        std::cout<<line<<"\n";
    }

    fin.close();

    return 0;
}