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