运行程序时出现此错误。它成功编译但是给了我一些关于未初始化变量的警告,我认为这些变量已初始化。我收到错误“调试错误!运行时检查失败#3-变量'sumMaleGPA'正在使用而未初始化。”
#include <iostream>
#include <iomanip>
#include <fstream>
using namespace std;
void openFiles(ifstream& inFile, ofstream& outFile)
{
inFile.open("finalin.dat");
outFile.open("finalout.dat");
outFile << fixed << showpoint << setprecision(2);
inFile >> fixed >> showpoint >> setprecision(2);
if (!inFile||!outFile)
{
cout << "Problem opening file.";
}
}
void initialize(int countFemale,int countMale,float sumFemaleGPA,float sumMaleGPA)
{
countFemale=0;
countMale=0;
sumFemaleGPA=0;
sumMaleGPA=0;
}
void sumGrades(ifstream& inFile, float sumFemaleGPA, float sumMaleGPA,int m,int f)
{
sumFemaleGPA=0;
sumMaleGPA=0;
if (!inFile)
{
inFile.open("finalin.dat");
}
char sex;
float grade;
while(!inFile.eof())
{
inFile >> sex >> grade;
switch (sex)
{
case 'f': (sumFemaleGPA= sumFemaleGPA + grade);
f++;
break;
case 'm': (sumMaleGPA= sumMaleGPA + grade);
m++;
break;
}
}
}
void averageGPA(float avgfGPA, float avgmGPA, int m, int f, float sumFemaleGPA, float sumMaleGPA)
{
avgmGPA=0;
avgfGPA=0;
avgfGPA=sumFemaleGPA/f;
avgmGPA=sumMaleGPA/m;
}
void printResults(float avgfGPA, float avgmGPA, ofstream& outFile)
{
cout <<"The average GPA of the female students is: "<< avgfGPA << endl;
cout <<"The average GPA of the male students is: "<< avgmGPA;
outFile << "The average GPA of the female students is: "<< avgfGPA << endl;
outFile <<"The average GPA of the male students is: "<< avgmGPA;
}
int main()
{
int countFemale;
int countMale;
float sumFemaleGPA;
float sumMaleGPA;
float avgfGPA;
float avgmGPA;
ifstream inFile;
ofstream outFile;
openFiles(inFile,outFile);
initialize(countFemale,countMale,sumFemaleGPA,sumMaleGPA);
sumGrades(inFile,sumFemaleGPA,sumMaleGPA,countMale,countFemale);
averageGPA(avgfGPA,avgmGPA,countMale,countFemale,sumFemaleGPA,sumMaleGPA);
printResults(avgfGPA,avgmGPA, outFile);
}
不确定错误发生的位置,所以我发布了整个文件。
答案 0 :(得分:1)
您的initialize
和averageGPA
功能不正确。
您要在函数内修改的任何参数都应为passed by reference:
void initialize(int &countFemale,int &countMale,float &sumFemaleGPA,float &sumMaleGPA)
void averageGPA(float &avgfGPA, float &avgmGPA, int m, int f, float &sumFemaleGPA, float &sumMaleGPA)
实际上,initialize()
函数实际上并没有初始化变量 - 因此当您第一次尝试使用它们时,为什么会出现调试错误。
现在,你正在经历价值。参数将复制到函数中。然后,该函数修改本地副本而不是传入的副本。
答案 1 :(得分:1)
您的初始化函数并不是初始化您的想法,因为您传入的参数是按值传递的。您需要查看passing by-reference。
严格来说错误是因为......
int countFemale;
int countMale;
float sumFemaleGPA;
float sumMaleGPA;
float avgfGPA;
float avgmGPA;
这些变量未初始化为任何内容。你可以做点什么
int countFemale = 0;
int countMale = 0;
float sumFemaleGPA = 0;
float sumMaleGPA = 0;
float avgfGPA = 0;
float avgmGPA = 0;
也许为了增强您的理解,更改初始化函数以将teh值初始化为1,并注意值不会从0更改。这是因为您将变量的副本传递给初始化函数。您希望使用&
运算符传递对原始变量的引用。