读书人

怎么用动态内存分配结构体变量可以为N

发布时间: 2012-03-02 14:40:28 作者: rapoo

如何用动态内存分配结构体变量可以为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;


}




[解决办法]
偶也初学,这样写写试

C/C++ code
struct student *pstrStu;int g; /*要分配内存的个数*//*分配内存*/pstrStu = (struct student*)malloc(sizeof(struct student)*g)/*操作*/......./*操作完成,释放内存*/free(pstrStu); 


[解决办法]
只需要把你那句

C/C++ code
struct student in[10];
[解决办法]
C/C++ code
cout<<"Input student num:"cin>>g;student *Students = new tudent[g];for(int i=0;i<g;i++){    cin>>Students[i].name;    cin>>Students[i].age;    cin>>Students[i].c;     cin>>Students[i].en;     cin>>Students[i].score;}...delete []Students;
[解决办法]
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 in[10],(*p)[10];
p=∈

如何用动态内存分配结构体变量可以为N个.

void main(int argc,char *argv)
{
int N=atoi(argv[1]);
struct student in[N],(*p)[N];
p=∈
}

然后你直接
*.exe 12,就是12个了;

读书人网 >C++

热点推荐