我正在尝试从文本文件中提取数据以将其放入变量中。这就是文本文件的样子:
Cars.txt
1999 Ford Ranger 3000 156000 used
2000 Mazda Miata 4000 98000 used
2015 Jeep Wrangler 33000 250 new
我的输出应该是这样的:
Category| Number| Total Price| TotalMileage|
New| 1| 33000| 250|
Used| 2| 7000| 254000|
此函数应读取整个文件并编译统计信息。由于每个变量都是引用变量,如果在此处进行更改,则应该影响用于调用函数的变量。在读完整个文件后,您应该能够打印统计数据。
double newTotalPrice = 0;
double newTotalMileage = 0;
double usedTotalPrice = 0;
double usedTotalMileage = 0;
int numUsed = 0;
int numNew = 0;
std::ifstream fin;
std::string filename = "cars.txt";
bool isOpen = GetInputFileStream(&fin, filename);
AnalyzeFile(fin,
numUsed,
numNew,
newTotalPrice,
newTotalMileage,
usedTotalPrice,
usedTotalMileage);
PrintStatistics(std::cout,
numUsed,
numNew,
newTotalPrice,
newTotalMileage,
usedTotalPrice,
usedTotalMileage);
std::cout << "Press ENTER to continue";
std::cin.get();
}
void AnalyzeFile(std::istream & fin,
int & numUsed,
int & numNew,
double & newTotalPrice,
double & newTotalMileage,
double & usedTotalPrice,
double & usedTotalMileage)
{
numUsed = 0;
numNew = 0;
newTotalPrice = 0;
newTotalMileage = 0;
usedTotalPrice = 0;
usedTotalMileage = 0;
while (!fin.eof())
{
fin >> numNew
fin >> Price;
fin >> Mileage;
}
}
所以我的问题是,如何从文本文件中读取数据并将其放入变量中?另外,如何让它收集所有变量,如二手车的总价格并加起来?我觉得我让它变得比它需要的更复杂。
答案 0 :(得分:1)
这里处理fstream有些棘手。这是编写AnalyzeFile()函数的一种简单方法:
void AnalyzeFile(std::istream & fin,
int & numUsed,
int & numNew,
double & newTotalPrice,
double & newTotalMileage,
double & usedTotalPrice,
double & usedTotalMileage)
{
int modelYear, Price, Mileage;
string Make, Model, Condition;
numUsed = 0;
numNew = 0;
newTotalPrice = 0;
newTotalMileage = 0;
usedTotalPrice = 0;
usedTotalMileage = 0;
do
{
//read each field in a line
Condition = "";
fin>>modelYear>>Make>>Model>>Price>>Mileage>>Condition;
if (Condition == "") break; //no valid data loaded
if (Condition == "used")
{
numUsed++;
usedTotalPrice += Price; //after all entries have been added usedTotalPrice will contain the sum of all the used car prices.
usedTotalMileage += Mileage;
//do other calculations
}
else if (Condition == "new")
{
//do updates for new condition
}
} while (!fin.eof() && !fin.bad());
}
请注意,此代码不包含任何错误检查,只是帮助您入门的大纲。一个棘手的事情:读完最后一个字符串fin.eof()将返回true,即使最后一行是有效的。这就是为什么我检查一下条件&#39; string已从文件中收到任何数据。