[英]C++ Program Boolean? Error
我應該編寫一個從文件中讀取學生ID和成績的程序,該程序具有3個功能:
getResults
:此函數從文件中讀取並計算失敗的次數(如果得分<55)計算平均值並返回學生人數。
display
:將所有內容顯示在屏幕上
isF
:檢查分數是否小於55,如果小於,則返回true。 (換句話說,如果學生失敗,它將返回true。)
我的程序可以正常工作,直到檢查有多少失敗為止。 我幾乎可以肯定這是一個邏輯錯誤,但我不知道在哪里。 失敗的學生人數未正確計算。 根據示例文件,當它應該是2時,我一直得到1。
#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
我得到的輸出是完全一樣的,除了我讓一名學生失敗。
首先將numfailed
初始化為0
(感謝@ Peter),然后將其更改為:
failed = isF(studentGrade);
對此:
failed += isF(studentGrade);
或這個:
failed += isF(studentGrade) ? 1 : 0;
您需要更改兩件事。 首先將函數中的失敗初始化為零,然后進行修改以添加失敗計數。 這是修改后的函數:
int getResults(ifstream &input, int &failed, double &average)
{
int studentID, studentGrade, total = 0, numberOfStudents = 0;
failed = 0;
while (input >> studentID >> studentGrade)
{
total = total + studentGrade;
numberOfStudents = numberOfStudents + 1;
failed += isF(studentGrade); //this ensures that every time a student fails, it is added
}
average = total / numberOfStudents;
return numberOfStudents;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.