c++ - 冒泡排序崩溃程序 C++

标签 c++ sorting codeblocks bubble-sort

所以我一直在为类做一个项目,一切都进行得很顺利,直到我不得不按姓氏升序对信息进行排序。更详细地说,在我的程序中,我应该接受文件输入,将其应用到我认为合适的任何类型的变量中,通过将他们的答案与答案键进行比较来计算他们的成绩,然后按姓氏对条目进行排序。事不宜迟,这是我的代码! (要温柔)

#include <iostream>
#include <iomanip>
#include <string>
#include <fstream>
#include <algorithm>

const int TEST_SIZE = 10;

using namespace std;

struct StudentInfo
{
int id;
string fName;
string lName;
char testAnswers[10];
int totalPoints = 0;
int avg = 0;
char letterGrade;

};



void inputInfo(char[], StudentInfo[]);
void calcGrade(char[], StudentInfo[]);
void bubbleSort(StudentInfo[]);
void outputInfo(StudentInfo[]);

int main()
{
StudentInfo studentInfo[10];
string temp;
char answerKey[10];

inputInfo(answerKey, studentInfo);
calcGrade(answerKey, studentInfo);
bubbleSort(studentInfo);
outputInfo(studentInfo);

return 0;
}

void inputInfo(char answerKey[], StudentInfo studentInfo[])
{
cout << "Please enter the 10-question answer key: \n";

for(int i = 0; i < TEST_SIZE; i++)
    {
        cout << "Question " << i+1 << "\n";
        cin >> answerKey[i];
    }

    ifstream inFile("student.txt");

    for(int i = 0; i < TEST_SIZE; i++)
        {
            inFile >> studentInfo[i].id;
            inFile >> studentInfo[i].fName;
            inFile >> studentInfo[i].lName;

            for(int j = 0; j < TEST_SIZE; j++){
            inFile >> studentInfo[i].testAnswers[j];
            }
        }
}

void calcGrade(char answerKey[], StudentInfo studentInfo[])
{
for(int i = 0; i < TEST_SIZE; i++)
    {
        for(int j = 0; j < TEST_SIZE; j++)
            {
                if(studentInfo[i].testAnswers[j] == answerKey[j])
                    {
                        studentInfo[i].totalPoints += 5;
                    }
                    studentInfo[i].avg = studentInfo[i].totalPoints * 2;

                    if(studentInfo[i].avg >= 90)
                        {
                            studentInfo[i].letterGrade = 'A';
                        }
                    else if(studentInfo[i].avg >= 80)
                        {
                            studentInfo[i].letterGrade = 'B';
                        }
                    else if(studentInfo[i].avg >= 70)
                        {
                            studentInfo[i].letterGrade = 'C';
                        }
                    else if(studentInfo[i].avg >= 60)
                        {
                            studentInfo[i].letterGrade = 'D';
                        }
                    else
                        {
                            studentInfo[i].letterGrade = 'F';
                        }
            }
        }
}

void bubbleSort(StudentInfo studentInfo[])
{
StudentInfo temp;
int i;
int j;

for(i = 0; i < (TEST_SIZE-1); i++)
    {
        for(j = 0; j < TEST_SIZE; j++)
            {
                if(studentInfo[j].lName < studentInfo[j-1].lName)
                    {
                        temp = studentInfo[j];
                        studentInfo[j] = studentInfo[j-1];
                        studentInfo[j-1] = temp;
                    }
            }
    }
}

void outputInfo(StudentInfo studentInfo[])
{
cout << setprecision(1) << fixed;

cout << "Student ID\tStudent Name\tAnswers\tTotal Pts\tAverage\t   Letter Grade" << endl;

for(int i = 0; i < TEST_SIZE; i++)
    {
        cout << studentInfo[i].id << "\t";
        cout << studentInfo[i].lName << " ";
        cout << studentInfo[i].fName << "\t";

        for(int j = 0; j < TEST_SIZE; j++)
            {
                cout << studentInfo[i].testAnswers[j];
            }
        cout << "\t" << studentInfo[i].totalPoints << "\t";
        cout << studentInfo[i].avg << "\t";
        cout << studentInfo[i].letterGrade << "\n";
    }
}

在我微薄的能力范围内什么都试过了,但我的程序总是崩溃。假设在冒泡排序期间,因为没有该部分它工作正常。如果有人能告诉我我错在哪里,我将不胜感激。对于我造成的任何不便,我们深表歉意。

最佳答案

这里发生了什么

temp = studentInfo[j];
studentInfo[j] = studentInfo[j-1];
studentInfo[j-1] = temp;

j==0 ?您越界访问。你最好使用 std::swap 来自 <algorithm>喜欢

std::swap(studentInfo[j], studentInfo[j+1]);

确保您运行 j直到 TEST_SIZE - 1 .或者编写“手动”交换,但使用 jj+1 交换.

关于c++ - 冒泡排序崩溃程序 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34033789/

相关文章:

c++ - 在一个进程中运行多个程序?

javascript - JS 按特定排序顺序排序

java - Java中大型数据集的基于文件的合并排序

CodeChef - 运行时错误(SIGSEGV)

c++ - wxSmith Code::Blocks Hello World 错误

C++:未使用嵌入式模板调用析构函数

c# - SWIG C++ 到 C# 错误无法找到入口点 SWIGRegisterExceptionCallbacks_xxxx

javascript - 使用下拉选择选项按日期对列表进行排序

c++ - 使用代码块在 Windows 7 上运行 TBB 代码

c++ - 具有两个参数包的函数模板重载决议