Ошибка, отображаемая при печати переменной - PullRequest
0 голосов
/ 05 октября 2011

Хотелось бы знать, были ли ошибки в этом, но я не знаю.Вот класс:

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 голосов
/ 05 октября 2011

Вы распечатываете элемент averageGrade, который вы никогда не назначали, поэтому он имеет случайное значение. Вместо этого вы хотите напечатать вывод функции: std::cout << s.average()

0 голосов
/ 05 октября 2011

Вы добавляете 10 числа, даже если пользователь указал меньше 10.

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

Эта строка должна быть

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

Значения оценки [10]автоматически не инициализируется до 0.0.

0 голосов
/ 05 октября 2011

Одна проблема заключается в том, что вы передаете grade+10 для накопления, даже если пользователь не вводит десять записей.Это может вызвать накопление для чтения ненужных данных, что может иметь непредсказуемые последствия.

Это можно исправить, изменив x с плавающей запятой на int и изменив вызов накопления на averageGrade = accumulate(grade, grade + x, 0.0);

...