打印变量时显示错误

时间:2011-10-05 17:54:43

标签: c++ user-experience

我希望我知道这是错误,但我没有。这是班级:

class Student
{
public:
float grade[10];
float averageGrade;

float average();
Student() : averageGrade(0.0f) {}

};

这是功能:

float Student::average()
{ 

    cout << "How many grades would you like to enter? (Up to ten)\n";
    float x;
    cin >> x;

cout << "What is your first grade?";
cin >> grade[0];
for (int i = 1; i < x; i++)
{
cout << "What is the next number?\n";
cin >> grade[i];
}
averageGrade = accumulate(grade, grade+10, 0.0);
averageGrade = averageGrade / x;

return averageGrade;
    }

主要是:

    int main()
{
Student s;

s.average();

cout << s.averageGrade;
system ("PAUSE");
return 0;
}

所以每当它输出s.averageGrade,我就会得到看起来像内存地址的内容。编译时没有错误。

这是输出:

1>------ Build started: Project: Weapons, Configuration: Debug Win32 ------
1>Compiling...
1>weapon.cpp
1>c:\users\hastudent\documents\visual studio 2008\projects\weapons\weapons\weapon.cpp(31) : warning C4244: '=' : conversion from 'double' to 'float', possible loss of data
1>Linking...
1>Embedding manifest...
1>Build log was saved at "file://c:\Users\HAStudent\Documents\Visual Studio 2008\Projects\Weapons\Weapons\Debug\BuildLog.htm"
1>Weapons - 0 error(s), 1 warning(s)
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========

3 个答案:

答案 0 :(得分:0)

一个问题是即使用户没有输入十条记录,也会将grade+10传递给累积。这可能导致累积读取垃圾数据,这可能会产生不可预测的影响。

您可以通过将x从float更改为int,并将累积调用更改为averageGrade = accumulate(grade, grade + x, 0.0);

来解决此问题。

答案 1 :(得分:0)

您正在打印出您从未分配的averageGrade成员,因此它具有随机值。您想要打印函数的输出:std::cout << s.average()

答案 2 :(得分:0)

即使用户指定的数字少于10,您也要添加10个数字。

averageGrade = accumulate(grade, grade+10, 0.0);

此行应为

averageGrade = accumulate(grade, grade+x, 0.0);

成绩[10]值不会自动初始化为0.0

相关问题