я должен написать программу, которая считывает студент идентификаторы и классы из файла, с 3-мя функции:C++ Program Boolean? Ошибка
getResults
: эта функция считывает из файла и рассчитывает, сколько не удалось (если оценка < 55) вычисляет среднее значение и возвращает количество студентов.display
: отображает все на экранеisF
: проверяет, является ли оценка меньше, чем 55, и возвращает истину, если она есть. (Другими словами, если студент не смог он возвращает истину.)
Моя программа прекрасно работает вплоть до проверки, сколько не удалось. Я почти уверен, что это логическая ошибка, но я не могу понять, где. Количество неудавшихся студентов не рассчитано правильно. Я продолжаю получать 1, когда он должен быть 2 в соответствии с образцом файла.
#include <iostream>
#include <fstream>
using namespace std;
int getResults(ifstream &input, int &failed, double &average);
bool isF(int score);
void display(int num_students, double average, int num_failed);
int main() {
int numfailed, numOfStudents;
double avg;
ifstream in_stream("grades.txt");
numOfStudents = getResults(in_stream, numfailed, avg);
display(numOfStudents, avg, numfailed);
system("PAUSE");
return 0;
}
int getResults(ifstream &input, int &failed, double &average) {
int studentID, studentGrade, total = 0, numberOfStudents = 0;
while (input >> studentID >> studentGrade) {
total = total + studentGrade;
numberOfStudents = numberOfStudents + 1;
failed = isF(studentGrade);
}
average = total/numberOfStudents;
return numberOfStudents;
}
bool isF(int score) {
if (score < 55)
return true;
else
return false;
}
void display(int num_students, double average, int num_failed) {
cout << "Number of Students: " << num_students << endl;
cout << "Class Average: " << average << endl;
cout << "Number of students failed: " << num_failed << endl;
}
Мой пример файла выглядит следующим образом:
- 333 95
- 123 40
- 111 88
- 121 70
- 110 55
- 909 45
Пример вывода:
Количество студентов: 6
Класс Средний: 65
Количество студентов не удалось: 2
Выход, который я получаю, точно такой же, за исключением того, что я получил 1 студент.
* Мой вопрос в том, что моя программа работает нормально до проверки того, сколько провалилось. Я почти уверен, что это логическая ошибка, но я не могу понять, где. * Каков ваш вопрос? – Daqs
Вам нужно аккумулировать сбои. –
Вы можете заменить 'if (score <55) return true; else return false; 'with' return (score <55); '. Но вы не считаете неудачи. –