代码本身没啥错,编译也正常通过,但是在使用功能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;
}
你的意思是修改学生信息的时候没用是吧
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,此时在之后的判断中可以进行相应的处理。
上述代码只是为了解决找不到学生信息的问题,你还需要根据实际需求完成对学生信息的修改逻辑。
#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;
}
输出:
其对应的二叉树如下图所示: