未初始化?,学费成本,局部变量,
uninitialized?, tuitionCost, local Variable,
int main()
{
double tuitionCalc(int sumCreditHoursTaken);
int numCourses;
double total = 0.0;
double tuitionCost= 0.0;
cout << "tt This Program calculates a student's total number ofn";
cout << "ttcredit hours and tution for a given semester.n";
cout << "nPlease enter the number of Courses you will be taking this semester: ";
cin >> numCourses;
for ( int count = 1; count <= numCourses; count++)
{
double sumCreditHoursTaken;
cout << " please enter the number of credit hours for course" << count << ": ";
cin >> sumCreditHoursTaken;
total += sumCreditHoursTaken;
}
cout << fixed << showpoint << setprecision(2);
cout << "Your Total number of credit hours is: " << total << endl;
cout << "Your total tuition will be: $" << tuitionCalc(tuitionCost) << "nn";
return 0;
}
并且 IM 调用的函数是
double tuitionCalc(int sumCreditHoursTaken)
{
double tuitionCost = 0.0;
double costCreditHour = 147.00;
double maxHoursFullTuition = 12;
double maintFeeAddOn = 29.33;`
if (sumCreditHoursTaken <= maxHoursFullTuition)
cout<< " " << (sumCreditHoursTaken * costCreditHour);
else if (sumCreditHoursTaken > maxHoursFullTuition)
cout << " " << (maxHoursFullTuition * costCreditHour) + ((sumCreditHoursTaken - maxHoursFullTuition) * maintFeeAddOn);
return tuitionCost;
}
课程数输入为 5学分为 3,3,3.5,4,2.5我得到了总学分,但ICANT似乎显示了学费?谢谢 S
您实际上永远不会tuitionCalc()
方法中为tuitionCost
赋值,因此它将始终0.0
。
详细说明:您正在从tuitionCalc()
返回tuitionCost
。您首先初始化tuitionCost = 0.0
,但从不继续为其分配任何计算值。因此,当您返回 tuitionCost
时,它将返回您将其初始化为的值:0.0
。
我还没有详细检查您的代码,但是如果您的输入包含浮点数,则将sumCreditHoursTake的类型从int更改为double。
此外,将调用学费计算的参数从学费成本更改为总计。
OP 似乎已经误解了范围以及如何将变量传递给函数。
在main
中,OP 定义了 tuitionCost
。 tuitionCalc
定义了另一个tuitionCost
。这些是不同的tuitionCost
。它们表示内存中的不同位置,并且可以存储不同的值。
接下来,因为定义了tuitionCalc
函数
double tuitionCalc(int sumCreditHoursTaken)
tuitionCalc(tuitionCost)
将tuitionCost
将其转换为整数,并将副本传递到tuitionCalc
中,它将与名称 sumCreditHoursTaken
一起使用。可以说OP在这一点上有三个tuitionCalc
。不是他们想要的。
分解tuitionCalc
原型,我们看到它需要 sumCreditHoursTaken
,一个整数,并且基于名称所花费的学分数,而不是总成本。 tuitionCalc
还返回一个double
并从中推断函数的用途;的名字,人们会期望它计算并返回学费。
就像阿纳托利在他的回答中所说的那样,tuitionCalc
的输入几乎肯定应该是total
的,计算的学分总数,输出应该是tuitionCost
的。
由于这有家庭作业的味道,因此完全回答这个问题不符合OP的最佳利益。相反,这里有一些建议:
消除main
tuitionCost
。它只会增加混乱。您可以重用变量名称,但只能在有明显好处的情况下这样做。如果你有一个cost
和一个接受和使用cost
的函数,那么对两者都使用 cost
是有意义的。请记住,函数内部的成本是一个不同的实体,除非您通过引用传递。在
void function(int & cost)
被调用者
function(cost);
两个cost
是相同的。但在
void function(int cost)
被调用者
function(cost);
function
的开销都是调用方cost
的副本,函数所做的任何更改都只会影响副本。
声明变量靠近使用它们的位置。这样,阅读您的代码的人就不必上下滚动,否则就不必去寻找。它对你也有帮助,因为它会犯一些错误,比如"为什么调用一个用double
int
的函数更明显?
不要cout
tuitionCalc
.计算并返回tuitionCost
。允许main
输出tuitionCost
。名称类似于 calc
的函数应该只计算。名称应尽可能接近地描述功能。
首先,您应该在声明函数原型之前创建它。您使用的代码中存在一些混乱,我尽力省略错误,希望这有所帮助!
#include <iostream>
#include <iomanip>
using namespace std;
double tuitionCal(double sumCreditHoursTaken);
int main() {
double tuitionCalc(int sumCreditHoursTaken);
int numCourses;
double total = 0.0;
//double tuitionCost= 0.0;
cout << "tt This Program calculates a student's total number ofn";
cout << "ttcredit hours and tution for a given semester.n";
cout << "nPlease enter the number of Courses you will be taking this semester: ";
cin >> numCourses;
double sumCreditHoursTaken; // you should create this variable outside the for loop
for ( int count = 1; count <= numCourses; count++)
{
cout << " please enter the number of credit hours for course" << count << ": ";
cin >> sumCreditHoursTaken;
total += sumCreditHoursTaken;
}
double tuitionCost=tuitionCal(total);
cout << fixed << showpoint << setprecision(2);
cout << "Your Total number of credit hours is: " << total << endl;
cout << "Your total tuition will be: $" <<tuitionCost<< "nn";// I assume this is what you want
return 0;
}
double tuitionCal(double sumCreditHoursTaken)//the parameter type is double now
{
double tuitionCost = 0.0;
double costCreditHour = 147.00;
double maxHoursFullTuition = 12;
double maintFeeAddOn = 29.33;
if (sumCreditHoursTaken <= maxHoursFullTuition)
tuitionCost=(sumCreditHoursTaken * costCreditHour);
else if (sumCreditHoursTaken > maxHoursFullTuition)
tuitionCost=(maxHoursFullTuition * costCreditHour) + ((sumCreditHoursTaken - maxHoursFullTuition) * maintFeeAddOn);
return tuitionCost;
//I don't see a point of returning the value and couting both you can
//do only one of the oprations
}
- 为什么C++有不同的变量初始化方式?
- 静态 constexpr 成员变量初始化
- C++不同的变量初始化
- 全局和局部变量初始化与 constexpr 的差异背后的基本原理
- 是变量初始化失败吗?
- 视觉C++:在 DLL 加载期间,全局变量初始化顺序是否具有确定性?
- 类静态变量初始化顺序
- 使用 constinit 变量初始化 constexpr 变量
- 是否可以在不修改父类的情况下将成员变量初始化推迟到继承的类?
- 如何将局部变量初始化为C++的未知值
- 使用全局变量初始化不同编译单元中的其他全局变量
- 使用默认构造函数引用成员变量初始化错误
- 宏的 if 语句中的变量初始化
- 不稳定的C :每行适应性变化多变量初始化
- DLL 中的 C++ 静态局部变量初始化会导致_CrtIsValidHeapPointer异常
- C++-局部未初始化变量的值
- 在VS2015中c++局部静态变量初始化线程安全吗?
- 多线程环境中的静态局部变量初始化
- 局部静态变量初始化是线程安全的
- C++11 中线程安全局部静态变量初始化的成本