我如何把它变成一个循环?
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;
}
我是 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;
}