查找遍历学生信息时找不到学生信息与输入值对应,如何解决?(关键词-码本)

代码本身没啥错,编译也正常通过,但是在使用功能2的时候却找不到输入进去的学生信息,自动跳出程序

#include"头文件.h"
class Student
{
public:
    int number;      //学生学号
    string name;     //学生姓名
    int age;         //学生年龄
    char sex;        //学生性别
    string academy;  //学生学院
    int grade;       //学生年级
    Student();//定义默认构造函数
    Student(int n, string nam, int a, char s, string ac, int g)
    {
        number = n;
        name = nam;
        age = a;
        sex = s;
        academy = ac;
        grade = g;

    }
    void setId(int n) { number = n; }
    int getId()
    {
        return number;
    }
    void display()
    {
        
        cout <<"学号:"<<number <<endl;
        cout <<"姓名: " << name << endl;
        cout <<"性别:" << sex << endl;
        cout <<"年龄: "<< age << endl;
        cout <<"学院: " << academy << endl;
        cout <<"年级: " << grade << endl;
        
    }

};

//添加学生信息
void Addstudent(Student* allStudents[], int & RealStu)
{
    system("cls");
    int number;
    string name;
    string academy;
    char sex;
    int age;
    int grade;
    char sign = 'y';//定义一个标识变量作为循环条件
    do
    {
        
        cout << " ===============请输入学生成绩信息===============" << endl;
        cout << "学号:";
        while (1)
        {
            number = 0;
            cin >> number;//输入学生学号
            //以防输入时输入不符合学号数据类型的数据
            if (number <= 0)
            {
                cout << "输入不合法,请重新输入";
                if (cin.fail()) //fail函数是用来判断一个流是否出错,fail()返回true
                {
                    cin.clear();//清楚错误状态
                    cin.sync();//清楚输入的错误字符
                }
            }
            else
                break;
        }
        

        cout << "请输入学生姓名:";
        cin >> name;
        cout << "请输入学生性别:";
        cin >> sex;
        cout << "请输入学生年龄:";
        while (1)
        {
            age = 0;
            cin >> age;    //同上判断输入的格式是否正确
            if (age <= 0)
            {
                cout << "输入不合法,请重新输入";
                if (cin.fail())
                {
                    cin.clear();
                    cin.sync();
                }
            }
            else
                break;
        }

        cout << "请输入学生学院:";
        cin >> academy;
        cout << "请输入学生年级:";
        while (1)
        {
            grade = 0;
            cin >> grade;
            if (grade <= 0)
            {
                cout << "输入不合法,请重新输入";
                if (cin.fail())
                {
                    cin.clear();
                    cin.sync();
                }
            }
            else
                break;
        }
        Student* stu = new Student(number, name, age, sex, academy, grade);//用new运算符动态分配内存
        allStudents[RealStu] = stu; //给存储所有学生信息的数组赋初值,将指针stu的地址传给数组首地址
        RealStu++;//实际学生数量每添加一个学生信息加一
        cout << "学生添加成功!" << endl;
        cout << "是否继续添加(y or n)?";
        cin >> sign;
        
    } while (sign != 'n');
    system("pause");
};

//修改学生信息
void change(Student* allStudents[], int& RealStu)
{
    system("cls");
    int nu;//定义学号,名字等变量便于后面修改时输入
    string na;
    string ac;
    char s;
    int a;
    int gr;
    Student* stu=0;
    system("cls");
    cout << "请输入需要修改信息的学生学号:";
    int id;
    cin >> id;

    for (int i = 0; i < RealStu; i++)
    {
        if (allStudents[i]->getId() ==id)
        {
            stu = allStudents[i];
            cout << "找到的学生信息如下:";
            cout << "姓名:" << stu->name;
            cout << "";
        }
    }
}


//浏览所有学生信息
void showAllStudents(Student* allStudents[], int nRealStu)
{
    system("cls");
    cout << "学生信息如下:" << endl;
    for (int i = 0; i < nRealStu; i++)
    {
        allStudents[i]->display();//数组访问学生类中的
    }
    system("pause");
}


int main()
{
    
    int choice;
    Student* allStudents[40]; //存储所有学生信息
    int RealStu = 0;               //当前实际学生数量
    

    
    bool bgo = true;
    while (bgo)
    {
        system("cls");
        cout << "----------------------------------------------------------------" << endl;
        cout << "--------------  欢迎使用学生住宿信息管理系统!------------------" << endl;
        cout << "--------------         请选择功能列表!       ------------------" << endl;
        cout << "  ****    1.添加学生                   2.修改学生信息      **** " << endl;
        cout << "  ****    3.删除学生                   4.浏览所有学生信息  **** " << endl;
        cout << "  ****    5.添加宿舍                   6.修改宿舍信息      **** " << endl;
        cout << "  ****    7.学生入住                   8.查询宿舍信息      **** " << endl;
        cout << "  ****                   0.退出系统                        **** " << endl;
        cout << "----------------------------------------------------------------" << endl;
        cout << "----------------------------------------------------------------" << endl;
        cin >> choice;
        switch (choice)
        {
            int s;
            cin >> s;
        case 1://添加学生
            Addstudent(allStudents, RealStu);
            break;
        case 2://修改学生信息
            change(allStudents,RealStu);
            break;
        case  3://删除学生
            break;
        case 4://浏览所有学生信息
            showAllStudents(allStudents, RealStu);
            break;
        case 5://添加宿舍
            break;
        case 6://修改宿舍信息
            break;
        case 7://学生入住
            break;
        case 8://查询宿舍信息
            break;
        case 0://退出系统
            bgo = false;
            cout << "===============感谢使用学生宿舍管理系统===============" << endl;
            exit(0);
            break;
        default:
            break;
        }

    }
    return 0;

}


void welcome()
{
    cout << "----------------------------------------------------------------" << endl;
    cout << "--------------  欢迎使用学生住宿信息管理系统!------------------" << endl;
    cout << "--------------         请选择功能列表!       ------------------" << endl;
    cout << "  ****    1.添加学生                   2.修改学生信息      **** " << endl;
    cout << "  ****    3.删除学生                   4.浏览所有学生信息  **** " << endl;
    cout << "  ****    5.添加宿舍                   6.修改宿舍信息      **** " << endl;
    cout << "  ****    7.学生入住                   8.查询宿舍信息      **** " << endl;
    cout << "  ****                   0.退出系统                        **** " << endl;
    cout << "----------------------------------------------------------------" << endl;
    cout << "----------------------------------------------------------------" << endl;

}

你的意思是修改学生信息的时候没用是吧

img


class Student
{
public:
    int number;      //学生学号
    string name;     //学生姓名
    int age;         //学生年龄
    char sex;        //学生性别
    string academy;  //学生学院
    int grade;       //学生年级

    Student();//定义默认构造函数
    Student(int n, string nam, int a, char s, string ac, int g)
    {
        number = n;
        name = nam;
        age = a;
        sex = s;
        academy = ac;
        grade = g;

    }
    void setId(int n) { number = n; }
    int getId()
    {
        return number;
    }
    void display()
    {

        cout << "学号:" << number << endl;
        cout << "姓名: " << name << endl;
        cout << "性别:" << sex << endl;
        cout << "年龄: " << age << endl;
        cout << "学院: " << academy << endl;
        cout << "年级: " << grade << endl;

    }

};

Student* allStudents[40]; //存储所有学生信息
int RealStu = 0;               //当前实际学生数量

//添加学生信息
void Addstudent(Student* allStudents[], int& RealStu)
{
    system("cls");
    int number;
    string name;
    string academy;
    char sex;
    int age;
    int grade;
    char sign = 'y';//定义一个标识变量作为循环条件
    do
    {

        cout << " ===============请输入学生成绩信息===============" << endl;
        cout << "学号:";
        while (1)
        {
            number = 0;
            cin >> number;//输入学生学号
            //以防输入时输入不符合学号数据类型的数据
            if (number <= 0)
            {
                cout << "输入不合法,请重新输入";
                if (cin.fail()) //fail函数是用来判断一个流是否出错,fail()返回true
                {
                    cin.clear();//清楚错误状态
                    cin.sync();//清楚输入的错误字符
                }
            }
            else
                break;
        }


        cout << "请输入学生姓名:";
        cin >> name;
        cout << "请输入学生性别:";
        cin >> sex;
        cout << "请输入学生年龄:";
        while (1)
        {
            age = 0;
            cin >> age;    //同上判断输入的格式是否正确
            if (age <= 0)
            {
                cout << "输入不合法,请重新输入";
                if (cin.fail())
                {
                    cin.clear();
                    cin.sync();
                }
            }
            else
                break;
        }

        cout << "请输入学生学院:";
        cin >> academy;
        cout << "请输入学生年级:";
        while (1)
        {
            grade = 0;
            cin >> grade;
            if (grade <= 0)
            {
                cout << "输入不合法,请重新输入";
                if (cin.fail())
                {
                    cin.clear();
                    cin.sync();
                }
            }
            else
                break;
        }
        Student* stu = new Student(number, name, age, sex, academy, grade);//用new运算符动态分配内存
        allStudents[RealStu] = stu; //给存储所有学生信息的数组赋初值,将指针stu的地址传给数组首地址
        RealStu++;//实际学生数量每添加一个学生信息加一
        cout << "学生添加成功!" << endl;
        cout << "是否继续添加(y or n)?";
        cin >> sign;

    } while (sign != 'n');
    system("pause");
};


//浏览所有学生信息
void showAllStudents(Student* allStudents[], int nRealStu)
{
    system("cls");
    cout << "学生信息如下:" << endl;
    for (int i = 0; i < nRealStu; i++)
    {
        allStudents[i]->display();//数组访问学生类中的
    }
    system("pause");
}


//修改学生信息
void change(Student* allStudents[], int& RealStu)
{
    system("cls");
    int nu;//定义学号,名字等变量便于后面修改时输入
    string na;
    string ac;
    char s;
    int a;
    int gr;
    Student* stu = 0;
    cout << "请输入需要修改信息的学生学号:";
    int id;
    cin >> id;
   
    for (int i = 0; i < RealStu; i++)
    {
        if (allStudents[i]->getId() == id)
        {
            stu = allStudents[i];
            cout << "找到的学生信息如下:";
            cout << "姓名:" << stu->name;
            cout << ""<<endl;
        }
    }
    system("pause");
}

int main()
{
    int choice;
   
    bool bgo = true;
    while (bgo)
    {
        system("cls");
        cout << "----------------------------------------------------------------" << endl;
        cout << "--------------  欢迎使用学生住宿信息管理系统!------------------" << endl;
        cout << "--------------         请选择功能列表!       ------------------" << endl;
        cout << "  ****    1.添加学生                   2.修改学生信息      **** " << endl;
        cout << "  ****    3.删除学生                   4.浏览所有学生信息  **** " << endl;
        cout << "  ****    5.添加宿舍                   6.修改宿舍信息      **** " << endl;
        cout << "  ****    7.学生入住                   8.查询宿舍信息      **** " << endl;
        cout << "  ****                   0.退出系统                        **** " << endl;
        cout << "----------------------------------------------------------------" << endl;
        cout << "----------------------------------------------------------------" << endl;
        cin >> choice;
        switch (choice)
        {
        case 1://添加学生
            Addstudent(allStudents, RealStu);
            break;
        case 2://修改学生信息
            change(allStudents, RealStu);
            break;
        case  3://删除学生
            break;
        case 4://浏览所有学生信息
            showAllStudents(allStudents, RealStu);
            break;
        case 5://添加宿舍
            break;
        case 6://修改宿舍信息
            break;
        case 7://学生入住
            break;
        case 8://查询宿舍信息
            break;
        case 0://退出系统
            bgo = false;
            cout << "===============感谢使用学生宿舍管理系统===============" << endl;
            exit(0);
            break;
        default:
            break;
        }

    }
    return 0;

}


void welcome()
{
    cout << "----------------------------------------------------------------" << endl;
    cout << "--------------  欢迎使用学生住宿信息管理系统!------------------" << endl;
    cout << "--------------         请选择功能列表!       ------------------" << endl;
    cout << "  ****    1.添加学生                   2.修改学生信息      **** " << endl;
    cout << "  ****    3.删除学生                   4.浏览所有学生信息  **** " << endl;
    cout << "  ****    5.添加宿舍                   6.修改宿舍信息      **** " << endl;
    cout << "  ****    7.学生入住                   8.查询宿舍信息      **** " << endl;
    cout << "  ****                   0.退出系统                        **** " << endl;
    cout << "----------------------------------------------------------------" << endl;
    cout << "----------------------------------------------------------------" << endl;

}


你代码都没放全,可能错误在你没放出来的地方

你贴的代码中,要解决此问题,判断相等之前先打印看看每次循环的getId(),先看看是否正常输出了,再进去if判断在找到匹配的学生后,程序需要提示用户输入新的学生信息,并将其更新到相应的学生对象中。


void change(Student* allStudents[], int& RealStu)
{
    system("cls");
    int id;
    cout << "请输入需要修改信息的学生学号: ";
    cin >> id;

    for (int i = 0; i < RealStu; i++)
    {
        Student* stu = allStudents[i];
        cout << "学号: " << stu->getId() << endl;
        if (stu->getId() == id)
        {
            cout << "找到的学生信息如下:" << endl;
            stu->display();

            cout << "请输入新的学生姓名: ";
            cin >> stu->name;

            cout << "请输入新的学生性别: ";
            cin >> stu->sex;

            cout << "请输入新的学生年龄: ";
            cin >> stu->age;

            cout << "请输入新的学生学院: ";
            cin >> stu->academy;

            cout << "请输入新的学生年级: ";
            cin >> stu->grade;

            cout << "学生信息修改成功!" << endl;
            return;
        }
    }

    cout << "未找到学生学号为 " << id << " 的信息。" << endl;
}

先打印输出看一下,判断相等之前那个代码有没有正常输出

引用chatgpt内容作答:
在功能2中,你需要根据学生学号查找对应的学生信息并进行修改。根据你提供的代码,如果找不到输入值对应的学生信息,程序会直接跳出,没有进一步处理的逻辑。为了解决这个问题,你可以在找不到对应学生信息的情况下,给出相应的提示并让用户重新输入。下面是修改后的代码示例:

//修改学生信息
void change(Student* allStudents[], int& RealStu)
{
    system("cls");
    int nu;//定义学号,名字等变量便于后面修改时输入
    string na;
    string ac;
    char s;
    int a;
    int gr;
    Student* stu = nullptr;
    system("cls");
    cout << "请输入需要修改信息的学生学号:";
    int id;
    cin >> id;

    for (int i = 0; i < RealStu; i++)
    {
        if (allStudents[i]->getId() == id)
        {
            stu = allStudents[i];
            cout << "找到的学生信息如下:";
            stu->display();
            break;
        }
    }

    if (stu == nullptr) {
        cout << "未找到对应学生信息,请检查学号输入是否正确!" << endl;
    } else {
        // 进行学生信息的修改
        // ...
    }
}

在修改学生信息的功能中,首先定义了一个指针变量stu,初始值为nullptr。在遍历学生数组时,如果找到对应学号的学生信息,将该学生的指针赋值给stu,并显示学生信息。如果没有找到对应学号的学生信息,stu保持为nullptr,此时在之后的判断中可以进行相应的处理。

上述代码只是为了解决找不到学生信息的问题,你还需要根据实际需求完成对学生信息的修改逻辑。

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7611545
  • 你也可以参考下这篇文章:实验二、顺序表的基本操作【简单易懂,代码可以直接运行】
  • 除此之外, 这篇博客: 数据结构之树和二叉树的基本概念,二叉树遍历算法的实现中的 完整代码如下: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • #include<stdio.h>
    #include<stdlib.h>
    typedef struct Tree {
    	char data;
    	struct Tree* Lchild;
    	struct Tree* Rchild;
    }*BitTree;
    BitTree createTree() {
    	BitTree T;
    	char data;
    	char temp;
    	scanf_s("%c", &data);
    	temp = getchar();
    	if (data == '.')
    	{
    		return NULL;
    	}
    	else {
    		T = (BitTree)malloc(sizeof(Tree));
    		T->data = data;
    		printf("请输入%c的左子树:",data);
    		T->Lchild = createTree();
    		printf("请输入%c的右子树:", data);
    		T->Rchild = createTree();
    		return T;
    	}
    }
    void Preorder(BitTree T) {//先序遍历
    	if (T == NULL) {
    		return;
    	}
    	printf("%c", T->data);//根节点遍历----这里将遍历改为了输出具体数据
    	Preorder(T->Lchild);//左子树遍历
    	Preorder(T->Rchild);//右子树遍历
    }
    void Inorder(BitTree T) {//中序遍历
    	if (T == NULL) {
    		return;
    	}
    	Preorder(T->Lchild);//左子树遍历
    	printf("%c", T->data);//数据输出
    	Preorder(T->Rchild);//右子树遍历
    }
    void Postorder(BitTree T) {//后序遍历
    	if (T == NULL) {
    		return;
    	}
    	Preorder(T->Lchild);//左子树遍历
    	Preorder(T->Rchild);//右子树遍历
    	printf("%c", T->data);//结点数据输出
    }
    int main() {
    	BitTree S;
    	printf("请输入根节点的数据:");
    	S=createTree();//S接受创建好的二叉树便于接下来的遍历
    	printf("先序遍历输出如下:");
    	Preorder(S);
    	printf("中序遍历输出如下:");
    	Inorder(S);
    	printf("后序遍历输出如下:");
    	Postorder(S);
    	return 0;
    }
    

    输出:

    在这里插入图片描述其对应的二叉树如下图所示:

    在这里插入图片描述

  • 您还可以看一下 徐朋老师的网络工程师内存存储容量计算强化训练教程课程中的 计算题之内存存储容量基本概念讲解小节, 巩固相关知识点