2011-10-05 66 views
0

我希望我知道这是错误,但我不知道。这里是类:打印变量时显示错误

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 ========== 
+0

我们可以看到输出吗? – Coffee

+0

累积()做什么?你能发布信息来源吗? – Kevin

+0

除了系统(“暂停”) - 不知道那里发生了什么! - 看起来对我来说应该没问题。 –

回答

0

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

您可以通过从浮动改变x为int,并改变累加调用averageGrade = accumulate(grade, grade + x, 0.0);

+0

谢谢!这解决了它。 – ChrisMP

+0

它以科学记数法显示“指针”。赶上凯文。 –

0

要打印出来,你从来没有指派所以它有一个随机值averageGrade成员解决这个问题。您想要打印该功能的输出:std::cout << s.average()

+0

他分配成员,然后返回相同。 –

0

即使用户指定小于10,您正在添加10数字。

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

该线路应该是

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

的等级[10]值不会自动获得初始化为0.0

+0

gah!我早些时候看到,但假定他会默认初始化数组。 –

+0

@MooingDuck那好,谢谢你的帮助。你是什​​么意思默认初始化? – ChrisMP

+0

'Student():averageGrade(0.0f),grade(){}'将'grade'的元素初始化为默认值零。 –