C++编程:作业的输出略有偏差

C++ Programming: Assignment's Output is Marginally Off

本文关键字:输出 编程 作业 C++      更新时间:2023-10-16

好的,所以任务是从一个名为tickets的文件中获取输入.txt并输出售出的门票总数以及总收入。文本文件中的值在两列中输入 (1( 售出的门票数量和 (2( 每个门票类别的价格。

文本文件如下所示:

250 5750
100 28000
50 35750
25 18750

这是我想出的代码...

#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;
/* Program Name:  Ticket_Sales.cpp
* Date: May 2, 2018
* Purpose: Calculate Total Ticket Sales
*/
int main() {
{
ifstream inFile;
float ticket_cost;
float tickets_sold;
float total_cost ;
float total_sold ;
float ticket_revenue;
/*
* I noticed someone doing something similar to this on StackExchange; seems absolutely brilliant to include
* a manner to check if the program is accessing the file.
*/
inFile.open("C:\Users\pinkp\CLionProjects\M05_Ticket_Sales\tickets.txt");
if (inFile.fail()) {
cout << "Failed to open the file." << endl;
cin.get ();
return 1;
}
while(inFile >> tickets_sold >> ticket_cost) {
total_sold += tickets_sold;
total_cost += ticket_cost;
ticket_revenue = (total_cost * total_sold);
}
cout << fixed << setprecision(2);
cout << "Total Tickets Sold:  " << total_sold << "." << endl;
cout << "Total Revenue:  " << ticket_revenue << "." << endl;
}
/*
* The value continues to return 2 less than the intended output, and I cannot pinpoint the exact cause.
*/
return 0;
}

但是我的输出ticket_revenue继续给我 37506248.00,手动将数字输入计算器时会给你 37506250.00。两个数字的差异。我想过只做一个"+2"来让它达到正确的数字,但我想我的教授会对此不屑一顾。

无论门票中的数字如何.txt(我已经更改了几次(,它总是比我预期的少两个。这是我以某种方式错过的一些超级简单的C++或编程概念吗?

谢谢!

您未能初始化ticket_revenue- 并查看它是如何分配的:

ticket_revenue = (total_cost * total_sold);

这将用售出的门票总数和所有价格的总的乘积覆盖ticket_revenue

你需要类似的东西(未经测试(:

unsigned long total_sold = 0;
unsigned long ticket_revenue = 0;
while (inFile >> tickets_sold >> ticket_cost) {
auto transaction_revenue = tickets_sold * ticket_cost;
total_sold += tickets_sold;
ticket_revenue += transaction_revenue;
}

顺便说一句,不要使用浮点类型进行货币计算!


下面是修复了上述错误且没有外部输入文件的代码版本(因此它作为最小、完整和可验证的示例(:

#include <iostream>
#include <vector>
int main()
{
static const
std::vector<std::pair<int, long>> sales =
{{ 250, 5750 },
{ 100, 28000 },
{ 50, 35750 },
{ 25, 18750 } };
long total_sold = 0;
long ticket_revenue = 0;
for (auto& sale: sales) {
int tickets_sold = sale.first;
long ticket_cost = sale.second;
total_sold += tickets_sold;
ticket_revenue += tickets_sold * ticket_cost;
}
std::cout << "Total Tickets Sold:  " << total_sold << ".n";
std::cout << "Total Revenue:  " << ticket_revenue << ".n";
}

这将产生正确答案:

Total Tickets Sold:  425.
Total Revenue:  6493750.

我想相反

while(inFile >> tickets_sold >> ticket_cost) {
total_sold += tickets_sold;
total_cost += ticket_cost;
ticket_revenue = (total_cost * total_sold);
}

你应该写

ticket_revenue = 0;
while(inFile >> tickets_sold >> ticket_cost) {
ticket_revenue += ticket_sold * ticket_cost;
}

否则,您将门票数量和门票成本相加,您应该获得更大的价值。