麻烦制作c ++学生班

时间:2018-04-16 20:06:21

标签: c++

对于我的作业,我必须制作一个程序,从标准输入读取学生数据,按姓氏/名字排序,并将结果打印到标准输出。学生包括姓氏,名字和平均成绩。它说不超过50名学生。 它还说你不应该依赖外部库函数来进行排序。

以下是示例:

Ware Henry 87.2

Dantes Edmond 91.4

Earhart Amelia 92.6

以下是如何排序的:

Dantes Edmond 91.4

Earhart Amelia 92.6

Ware Henry 87.2

以下是我到目前为止无法正常运行的代码:

#include <iostream>
#include <string>
using namespace std;

class student
{
public:
    student();
    void input();
    void output();
    void sort();
private:
    string Fname;
    string Lname;
    float gpa;
}

student::student()
{
    Fname = "";
    Lname = "";
    gpa = 0;
}

void student::input()
{
    cout << "Enter first name, last name, and gpa"<<endl;
    cin >> Fname >> Lname >> gpa;
}

void student::sort()
{
    char temp;
    int count = 0;
    int i = 1;
    while (i < word.size()) {
        if (word[i - 1] > word[i]) {
            temp = word[i];
            word[i] = word[i + 1];
            word[i + 1] = temp;
            i++;
            if (i >= word.size())
            {
                alpha(word);
            }
        }
        else
        {
            count++;
        }
    }
    return word;
}

void main()
{
    student.input();
}

关于我哪里出错以及任何可能的解决方案的任何建议?

3 个答案:

答案 0 :(得分:1)

您的student班级的成员变量只能容纳一名学生,您需要50名班级学生。

然后你应该把这些实例放在一个数组/向量中(无论你允许使用哪个容器)我假设你需要使用一个原始数组,这样就可以了。

student* students = new student[50];

你需要的是你的类中的比较函数能够对数组进行排序,比较函数知道你的类的内部,你可以决定如何对列表进行排序,例如姓氏之后。

sort函数可以在您的类中声明为静态函数,或者更逻辑地是外部函数,因为student不是student实例的容器。

完成后不要忘记删除数组

delete [] students;

在实际问题中你会使用std容器,例如算法排序这种工作。

答案 1 :(得分:0)

您的编译器必须告诉您排序方法中使用的wordalpha是未声明的标识符,并且已分配计数但从未使用过。

解决方案:永远不要从狂野的网络中窃取代码而不了解它的作用。你可以把别人的代码作为灵感,但盲目的复制粘贴是一个很大的禁忌。

为了给你下一步:你甚至没有存储你的学生,你只需输入一个,你如何只对一个条目进行排序?思考(和编码)您应该使用什么来存储它们,并从那里开始如何对它们进行排序。

祝你好运。

答案 2 :(得分:0)

您的代码无法正常工作的原因有多种,首要原因是您的类定义需要分号';'最后关闭它。

class student
{
public:
    student();
    void input();
    void output();
    void sort();
private:
    string Fname;
    string Lname;
    float gpa;
}; //semicolon here

在sort()方法中,使用变量字但从未声明,编码不是魔术,变量必须在使用之前声明和初始化,就像在代码中一样。

while (i < word.size()) { //word must be declared somewhere

此外,在sort方法中,您调用函数alpha(word),程序中不存在此函数。

sort方法的类型为void,这意味着它不会返回任何内容,但是你试图返回一个字符串。

sort方法的另一个问题是它永远不会从任何地方调用,永远不会被运行。

您尝试使用课程的方式也存在很大问题。要使用类的方法,首先必须实例化该类的对象,然后可以通过对象访问类的方法,如下所示:

int main()
{
    student theStudent;
    theStudent;

    theStudent.input();

    return 0;
}

另一个基本问题是你只是要获取这样一个对象的数据,你需要将几个对象存储在类似于数组的东西中,然后对数组中的对象进行排序:

int main()
{
    student students[5];

    for (int i = 0; i < 5; i++)
    {
        student newStudent;
        students[i] = newStudent;
        newStudent.input();
    }
    sort(students);
    delete[] students;
    return 0;
}

这将我们带到排序方法。明智的做法是不将排序作为学生类的方法,而是作为一个从main调用的函数(如上例中所示),这样就很容易从main对学生对象数组进行排序。

这些是一些建议,但我不打算为你做完整的功课,如果你使用谷歌和一些宝贵的能量,我相信你会成功。