如何将其转换为循环?

时间:2016-03-04 03:46:39

标签: c++ while-loop cin

我是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();
}

4 个答案:

答案 0 :(得分:3)

您想要从文件中读取内容,因此请使用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();
}

答案 1 :(得分:2)

你可以使用oldschool C风格

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

Ps:对不起我在移动设备上的简短回答

另外,根据您的操作系统,fgets可能会在读取每一行后在缓冲区中包含新行char。

答案 2 :(得分:0)

cin从标准输入读取,通常是终端。要从文件中读取,您需要使用inFile变量,cin

答案 3 :(得分:0)

假设您有一个名为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;
}