C++编程:作业的输出略有偏差
C++ Programming: Assignment's Output is Marginally Off
好的,所以任务是从一个名为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;
}
否则,您将门票数量和门票成本相加,您应该获得更大的价值。
相关文章:
- 递归函数计算序列中的平方和(并输出过程)
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 请解释"函数1(p1,p2,p3);"的输出
- C++:将控制台输出存储在宏中更好吗
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 为什么我的代码在输出中增加了93天
- C++编程:作业的输出略有偏差
- 以编程方式清除Visual Studio输出窗口
- 算法输出正确答案,但编程挑战给了我错误的答案
- C++编程的 DAW 用于图形渲染和音频输出
- 无法弄清楚如何在给定情况下对输出进行编程
- 竞争性编程中的快速输入/输出
- C++编程(If Else 语句)无法正确输出
- 在C++中,是否可以在编译时使用模板元编程输出评估值
- 为什么我的缓冲区输出被截断了?c++套接字编程
- 在TBB中使用递归、基于任务的并行编程获得不同的输出
- 以编程方式从父进程的子进程捕获打印,因此它们不会转到标准输出
- 我如何处理输入/输出格式的竞争性编程网站,如SPOJ
- c++遗传编程:调用链接器/编译器,执行编译后的程序和管道输入/输出