【问题标题】:C++ Program Boolean? ErrorC++ 程序布尔值?错误
【发布时间】:2015-06-06 07:18:50
【问题描述】:

我应该编写一个从文件中读取学生 ID 和成绩的程序,具有 3 个功能:

  • getResults:此函数从文件中读取并计算失败的人数(如果分数

  • 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

我得到的输出完全一样,除了我有 1 个学生失败。

【问题讨论】:

  • 我的问题如下,我的程序运行良好,直到检查失败了多少。我几乎可以肯定这是一个逻辑错误,但我不知道在哪里。你的问题是什么?
  • 你需要累积失败。
  • 您可以将if (score &lt; 55) return true; else return false; 替换为return (score &lt; 55);。但你没有计算失败。

标签: c++


【解决方案1】:

首先将您的numfailed 初始化为0(感谢@Peter),然后更改:

failed = isF(studentGrade);

到这里:

failed += isF(studentGrade);

或者这个:

 failed += isF(studentGrade) ? 1 : 0;

【讨论】:

  • numFailed 需要在main() 中初始化为零。它是未初始化的 - 除非你明确地这样做,否则不会初始化为零..
  • 养成初始化变量的习惯(至少对于 C/C++)。
  • 解决了!感谢 Chnossos 和 Peter!
【解决方案2】:

有两件事你需要改变。首先将函数中的失败初始化为零,然后修改以添加失败计数。这是修改后的函数:

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;

}

【讨论】:

    猜你喜欢
    • 2017-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-13
    • 1970-01-01
    • 2020-12-29
    • 1970-01-01
    相关资源
    最近更新 更多