我正在为一个班级的项目工作。该代码根据从文件中读取的数据计算运费。我遇到的问题是在计算中。从体积函数传递的值保持为零。我不认为我正确地传递了它。另外,不需要使用全局变量 - 尤其是使用计算功能 - 使用参数是我从教授那里得到的最后反馈。
以下是代码:
#include <iostream>
#include <iomanip>
#include <cmath>
#include <fstream>
using namespace std;
void header(int lab_number, char lab_part)
{
cout << "Kevin Schultz\n";
cout << "Lab" << lab_number << lab_part << endl << endl;
}
double length, width, height, x, weight, total = 0, shipping_cost, volume;
int main ()
{
double calculate(double length, double width, double height);
double volume;
double chargeAmount;
double charge(ifstream & inFile, ofstream & prt);
ifstream inFile;
ofstream prt("lab7new_out.txt");
header(7, 'A');
prt << " S & S Global Services\n";
prt << " Shipping Cost Analysis Report\n\n";
prt << "Length Width Height Weight Shipping\n";
prt << " Cost\n\n";
inFile.open("c:\\lab7\\pkg.txt");
if (!inFile)
cout << "Error opening the file\n";
inFile >> length;
inFile >> width;
inFile >> height;
inFile >> weight;
volume = calculate(length, width, height);
chargeAmount = charge(inFile, prt);
prt << "------------------------------------" << endl;
prt << "\nTotal cost: $" << total;
system("pause");
return 0;
}
double calculate(double length, double width, double height)
{
double volume;
volume = length * width * height;
return volume;
}
double charge(ifstream & inFile, ofstream & prt)
{
const double basic_charge = 12;
const double Vsurcharge = 5;
const double Dsurcharge = 4;
const double Wsurcharge = 2;
double netWeight = 0;
while (!inFile.eof())
{
shipping_cost = basic_charge;
if (volume > 7)
shipping_cost += Vsurcharge;
if (length > 3 || width > 3 || height > 3)
shipping_cost += Dsurcharge;
if (weight > 50)
{
netWeight = weight - 50;
shipping_cost += netWeight * Wsurcharge;
}
total += shipping_cost;
prt << setw(4) << right << setprecision(1) << length << setw(6) << right << setprecision(1) << width << setw(6) << right << setprecision(1) << height << setw(8) << right;
prt << weight << setw(5) << right << setprecision(2) << fixed << "$" << shipping_cost << endl;
inFile >> length;
inFile >> width;
inFile >> height;
inFile >> weight;
}
return total;
}
任何帮助都会很棒!
答案 0 :(得分:2)
正如你的教授所说,请不要使用全局变量。在您的代码中,您有不同的变量volume
,我怀疑您何时知道何时访问哪些变量。让我们来看看你的代码:
double volume; // global variable, never written, read in function charge
int main() {
...
double volume; // local variable, only visible in function main, but never used
...
}
double calculate(double length, double width, double height) {
double volume; // local variable, only visible in calculate
volume = ...;
return volume;
}
double charge(ifstream & inFile, ofstream & prt) {
...
if(volume > 7) // no local variable volume defined, so using global variable volume
...
}
此外,您声明了一个函数calculate,但是您从不调用它。
请考虑尽可能多地启用编译器警告。它可以帮助您找到错误。
答案 1 :(得分:0)
尝试这样的事情。问题是你需要在调用它之前声明你的函数原型,但是如果你把你的main函数放到.c文件的底部你不需要去掉原型函数,希望它很清楚
#include <iostream>
#include <iomanip>
#include <cmath>
#include <fstream>
using namespace std;
void header(int lab_number, char lab_part)
{
cout << "Kevin Schultz\n";
cout << "Lab" << lab_number << lab_part << endl << endl;
}
double length, width, height, x, weight, total = 0, shipping_cost, volume;
double calculate(double length, double width, double height)
{
double volume;
volume = length * width * height;
return volume;
}
double charge(ifstream & inFile, ofstream & prt)
{
const double basic_charge = 12;
const double Vsurcharge = 5;
const double Dsurcharge = 4;
const double Wsurcharge = 2;
double netWeight = 0;
while (!inFile.eof())
{
shipping_cost = basic_charge;
if (volume > 7)
shipping_cost += Vsurcharge;
if (length > 3 || width > 3 || height > 3)
shipping_cost += Dsurcharge;
if (weight > 50)
{
netWeight = weight - 50;
shipping_cost += netWeight * Wsurcharge;
}
total += shipping_cost;
prt << setw(4) << right << setprecision(1) << length << setw(6) << right << setprecision(1) << width << setw(6) << right << setprecision(1) << height << setw(8) << right;
prt << weight << setw(5) << right << setprecision(2) << fixed << "$" << shipping_cost << endl;
inFile >> length;
inFile >> width;
inFile >> height;
inFile >> weight;
}
return total;
}
int main ()
{
double volume = calculate(length, width, height);
double chargeAmount;
ifstream inFile;
ofstream prt("lab7new_out.txt");
header(7, 'A');
prt << " S & S Global Services\n";
prt << " Shipping Cost Analysis Report\n\n";
prt << "Length Width Height Weight Shipping\n";
prt << " Cost\n\n";
inFile.open("c:\\lab7\\pkg.txt");
if (!inFile)
cout << "Error opening the file\n";
inFile >> length;
inFile >> width;
inFile >> height;
inFile >> weight;
chargeAmount = charge(inFile, prt);
prt << "------------------------------------" << endl;
prt << "\nTotal cost: $" << total;
system("pause");
return 0;
}