【问题标题】:Error Displayed While Printing variable打印变量时显示错误
【发布时间】:2011-10-06 02:07:18
【问题描述】:

我希望我知道这是错误的,但我不知道。这是课程:

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

【问题讨论】:

  • accumulate() 有什么作用?可以发一下出处吗?
  • 除了system("PAUSE")——不知道那里发生了什么! -- 对我来说看起来不错,应该可以正常工作。
  • @Kevin -- accumulate()&lt;numeric&gt; 中,它是标准库的一部分。

标签: c++ user-experience


【解决方案1】:

一个问题是你通过grade+10来累加,即使用户没有输入十条记录。这可能会导致累积读取垃圾数据,从而产生不可预知的影响。

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

【讨论】:

  • 它以科学计数法显示,即“指针”。凯文抓得好。
【解决方案2】:

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

【讨论】:

  • 他分配成员,然后返回。
【解决方案3】:

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

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

这一行应该是

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

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

【讨论】:

  • 啊!我之前看到过,但假设他默认初始化了数组。
  • @MooingDuck 没关系,无论如何感谢您的帮助。默认初始化是什么意思?
  • Student() : averageGrade(0.0f), grade() {}grade 的元素初始化为默认值零。
  • float grade[10] = {}; 如果 grade 是局部变量而不是成员。
  • @MooingDuck - 是否使用grade() 来初始化标准中的成员数组?
猜你喜欢
  • 2019-02-14
  • 1970-01-01
  • 1970-01-01
  • 2018-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-17
  • 2018-12-11
相关资源
最近更新 更多