2014-02-27 87 views
0

本周,我的课程开始旋转,正在教材中找不到的材料。我使用的是Visual Studio 2010,该项目从键盘获取5个数字并获得平均值,但我必须使用具有.h头文件和相应的.cpp文件的函数才能获得信用。这是我迄今为止在C++中包含多个文件

Main.cpp的

#include <iostream> 
#include "average.h" 

using namespace std; 

const int numbersinput=5; 

int main() 
{ 
    int numbers,sum,avg; 

    cout << "Hello, please enter 5 numbers you would like to see the average for." << endl; 

    for (int i = 0; i != numbersinput; ++i) 
    { 
    cin >> numbers; 

    sum += numbers; 
    } 

    int average(int sum); 
    cout << avg; 

    system ("PAUSE"); 
    return 0; 
} 

的.H headerfile命名average.h

#include <iostream> 

using namespace std; 

int average(int); 

,并命名为average.cpp

#include <iostream> 
#include "average.h" 

using namespace std; 

const int numbersinput=5; 
int avg; 

int average(int sum) 
{ 
    avg = sum /numbersinput; 
    return avg; 
} 
其他.cpp文件

我可以获得成功的构建,但是在输入第一个数字并按回车后出现此错误。

运行检查失败#3 - 正在使用变量'sum'而没有 被初始化。

我不在这里?

+0

分配总和为零 – KRUKUSA

回答

0

您可能要你开始增加将其与+=之前初始化总和0

所以不是int numbers,sum,avg; 您将有int sum = 0;

0

改变这一行:

int numbers,sum,avg; 

收件人:

int numbers=0; 
int sum=0; 
int avg=0; 

这给出变量值 - 在它们被初始化之前(给定一个值)它们是未定义的,这意味着它们可以等于任何值。通过初始化他们,你给他们一个数字来补充你的金额。

编辑这些行:

int average(int sum); 

cout << avg; 

要:

cout << average(sum); 

int average(int sum)函数声明不以同样的方式,因为它是所谓的声明。整数是不必要的。在我编辑的代码中,您可以看到返回的值(average)被打印出来,而不是未被使用而留下。

此外,作为一般技巧,尽量不要给变量赋予相同的名称。尝试使函数变量sum被称为sumToAverage或者使main中的sum被称为total。选择不同的变量名是个好主意,所以你不会感到困惑。

+0

谢谢大家,这是一个漫长的一周,我错过了简单的错误。 – geno84

+0

没问题!每个人都会犯错误:) –

+1

@ geno84我还建议看看肖恩的答案。他抓住了一些其他重要的事情。 –

0

你说:

sum += numbers 

可是你有没有初始化sum,所以会有一些随机值是在栈上。更改声明sum到:

int sum = 0; 

此外,你使用全局变量传递信息的功能,这是不是一个好主意。摆脱avg变量和更改average到:

int average(int sum, int numberofvalues) 
{ 
    int avg = sum/numberofvalues; 
    return avg; 
} 

你也是在主的身体,你不需要做的,因为它是在头重新申报average。然后,你可以这样获得主要平均:

int avg = average(sum, numbersinput); 

现在,main看起来就像这样:

int main() 
{ 
int sum=0; 

cout << "Hello, please enter 5 numbers you would like to see the average for." << endl; 

for (int i = 0; i != numbersinput; ++i) 
{ 
    int number; 
    cin >> number; 

    sum += number; 
} 


int avg = average(sum, numbersinput); 

cout << avg;  

system ("PAUSE"); 

return 0; 
} 

哦,不要把using namespace std头文件!

+0

我的导师说:“你总是需要在每个文件中的命名空间命令”什么是重要的,为什么我不应该在头文件中使用命名空间st? – geno84

+0

你的老师是错误的,你不应该把它放到头文件中。原因是,如果引入你包含的所有'std'类。如果我想要一个'std'类,我会要求它。将它放入.cpp文件是很好的,因为它只会污染你的范围,但把它放到一个头文件中会污染包含你的头文件的每个人的范围。 – Sean