怎么用动态内存分配结构体变量可以为N个.
如何用动态内存分配结构体变量可以为N个...
字符问题已解决,谢谢各位大哥大姐.
再想问一下
如何用动态内存分配结构体变量可以为N个.
我以下代码是固定结构体变量数的
至多可以录入十个学生的信息
struct student in[10],*p[10]={&in[0],&in[1],&in[2],&in[3],&in[4],&in[5],&in[6],&in[7],&in[8],&in[9]}; //至多可存十个学生以内信息?????
//int g; //如何用动态内存分配创建g个学生录入结构体变量????????????
#include <iostream.h>
#include <string>
#include <stdlib.h>
void inp();
void print();
void pai();
void find();
struct student
{
char name[10];
int age;
int c;
int en;
int score;
};
struct student in[10],*p[10]={&in[0],&in[1],&in[2],&in[3],&in[4],&in[5],&in[6],&in[7],&in[8],&in[9]}; //至多可存十个学生以内信息?????
struct student *temp; //排序时作学生临时变量交换
struct student hh,*pp=&hh; //查找姓名时作临时变量
int g; //如何用动态内存分配创建g个学生录入结构体变量????????????
void inp() //录入学生信息
{ cout<<"\n你要录入几个学生的信息:";
cin>>g;
cout<<endl;
cout<<" 姓名 年龄 C++成绩 英语成绩\n";
for(int k=0;k<g;k++)
{cout<<"学生"<<k+1<<":";
cin>>p[k]->name>>p[k]->age>>p[k]->c>>p[k]->en;
}
}
void print() //打印学生信息
{ cout<<endl;
for(int j=0;j<g;j++)
cout<<"姓名:"<<p[j]->name<<" 年龄:"<<p[j]->age<<" C++成绩:"<<p[j]->c<<" 英语成绩:"<<p[j]->en<<" 总分:"<<(p[j]->c+p[j]->en)<<endl;
}
void pai() //排序
{for(int i=0;i<g;i++)
for(int j=i+1;j<g;j++)
if(p[i]->c>p[j]->c)
{ temp=p[i];
p[i]=p[j];
p[j]=temp;
}
cout<<"\n按C++成绩排序为:";
print();
}
void find() //查找姓名
{ int k;
cout<<"请输入你要查找的姓名:";
cin>>pp->name;
for(int f=0;f<g;f++)
{ k=strcmp(p[f]->name,pp->name);
if (k==0)
cout<<"姓名:"<<p[f]->name<<" 年龄:"<<p[f]->age<<" C++成绩:"<<p[f]->c<<" 英语成绩:"<<p[f]->en<<" 总分:"<<(p[f]->c+p[f]->en)<<endl;
}
}
void main()
{
cout<<" 学生管理系统\n";
cout<<"\n 1.输入学生信息 2.输出学生信息\n";
cout<<" 3.排序(按C++成绩排序) 4.查找学生\n";
cout<<" 5.退出本系统\n";
cout<<"________________________________________________________________________________";
loop:
cout<<"\n请选择主操作数:";
int r;
cin>>r;
switch (r)
{
case 1:inp(); break;
case 2:print(); break;
case 3:pai(); break;
case 4:find(); break;
case 5: exit(0);
default:cout<<"你输入的有误!"; exit(0); break;
}
goto loop;
}
------解决方案--------------------
偶也初学,这样写写试
字符问题已解决,谢谢各位大哥大姐.
再想问一下
如何用动态内存分配结构体变量可以为N个.
我以下代码是固定结构体变量数的
至多可以录入十个学生的信息
struct student in[10],*p[10]={&in[0],&in[1],&in[2],&in[3],&in[4],&in[5],&in[6],&in[7],&in[8],&in[9]}; //至多可存十个学生以内信息?????
//int g; //如何用动态内存分配创建g个学生录入结构体变量????????????
#include <iostream.h>
#include <string>
#include <stdlib.h>
void inp();
void print();
void pai();
void find();
struct student
{
char name[10];
int age;
int c;
int en;
int score;
};
struct student in[10],*p[10]={&in[0],&in[1],&in[2],&in[3],&in[4],&in[5],&in[6],&in[7],&in[8],&in[9]}; //至多可存十个学生以内信息?????
struct student *temp; //排序时作学生临时变量交换
struct student hh,*pp=&hh; //查找姓名时作临时变量
int g; //如何用动态内存分配创建g个学生录入结构体变量????????????
void inp() //录入学生信息
{ cout<<"\n你要录入几个学生的信息:";
cin>>g;
cout<<endl;
cout<<" 姓名 年龄 C++成绩 英语成绩\n";
for(int k=0;k<g;k++)
{cout<<"学生"<<k+1<<":";
cin>>p[k]->name>>p[k]->age>>p[k]->c>>p[k]->en;
}
}
void print() //打印学生信息
{ cout<<endl;
for(int j=0;j<g;j++)
cout<<"姓名:"<<p[j]->name<<" 年龄:"<<p[j]->age<<" C++成绩:"<<p[j]->c<<" 英语成绩:"<<p[j]->en<<" 总分:"<<(p[j]->c+p[j]->en)<<endl;
}
void pai() //排序
{for(int i=0;i<g;i++)
for(int j=i+1;j<g;j++)
if(p[i]->c>p[j]->c)
{ temp=p[i];
p[i]=p[j];
p[j]=temp;
}
cout<<"\n按C++成绩排序为:";
print();
}
void find() //查找姓名
{ int k;
cout<<"请输入你要查找的姓名:";
cin>>pp->name;
for(int f=0;f<g;f++)
{ k=strcmp(p[f]->name,pp->name);
if (k==0)
cout<<"姓名:"<<p[f]->name<<" 年龄:"<<p[f]->age<<" C++成绩:"<<p[f]->c<<" 英语成绩:"<<p[f]->en<<" 总分:"<<(p[f]->c+p[f]->en)<<endl;
}
}
void main()
{
cout<<" 学生管理系统\n";
cout<<"\n 1.输入学生信息 2.输出学生信息\n";
cout<<" 3.排序(按C++成绩排序) 4.查找学生\n";
cout<<" 5.退出本系统\n";
cout<<"________________________________________________________________________________";
loop:
cout<<"\n请选择主操作数:";
int r;
cin>>r;
switch (r)
{
case 1:inp(); break;
case 2:print(); break;
case 3:pai(); break;
case 4:find(); break;
case 5: exit(0);
default:cout<<"你输入的有误!"; exit(0); break;
}
goto loop;
}
------解决方案--------------------
偶也初学,这样写写试
- C/C++ code
struct student *pstrStu; int g; /*要分配内存的个数*/ /*分配内存*/ pstrStu = (struct student*)malloc(sizeof(struct student)*g) /*操作*/ ....... /*操作完成,释放内存*/ free(pstrStu);