簡體   English   中英

C ++程序布爾值? 錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM