misakaharuhi 2019-06-26 20:27 采纳率: 0%
浏览 809

c++ char *的使用问题

我写了一个成绩类,测试函数根据学生个数动态分配类的个数,好不容易都弄完了,在最后进行输出的时候却出现了问题。在我对类的属性赋值的循环里输出类的属性是有值的,但当我在循环外再次调用类的输出函数时却发现之前赋过的属性变成空的了。下面是代码,大家帮我看看是哪里有问题,我对char * 不是特别熟悉,可能是那部分的问题。
#include
using namespace std;
const int M=10;
class score
{
private:
float sc[M],aver;
int m;
char id;
char *bname[M];
public:
score();
score(float x[],int n,char *ide,char *b[]);
score(score &ob);
void set_score(float x[],int n);
void set_id(char *ide);
void set_book(char *b[]);
float get_score(int i)
{return sc[i];}
float get_aver()
{return aver;}
void print_score();
void add_score(float x[],int n);
char
get_book();
};
score::score()
{
m=M;
for(int i=0;i sc[i]=0;
aver=0;
for(int j=0;j bname[j]="未输入";
id="无名氏";
}
score::score(score &ob)
{
m=ob.m;
for(int i=0;i sc[i]=ob.sc[i];
aver=ob.aver;
for(int j=0;j bname[j]=ob.bname[j];
id=ob.id;
}
score::score(float x[],int n,char *ide,char *b[])
{
float sum=0;
m=n;
for(int i=0;i sc[i]=x[i];
for(int j=0;j sum+=x[j];
aver=sum/m;
for(int k=0;k bname[k]=b[k];
id=ide;
}
void score::set_score(float x[],int n)
{
float sum=0;
m=n;
for(int i=0;i sc[i]=x[i];
for(int j=0;j sum+=x[j];
aver=sum/m;
}
void score::print_score()
{
for(int i=0;i cout cout }
void score::add_score(float x[],int n)
{
int temp,i,j;
float sum=0;
temp=m;
m=m+n;
for(i=0;i sc[temp+i]=x[i];
for(j=0;j sum=sum+sc[j];
aver=sum/m;
}
void score::set_id(char *ide)
{
id=ide;
}
void score::set_book(char *b[])
{
for(int k=0;k bname[k]=b[k];
}
这是类的定义
#include
#include"stscore.h"
using namespace std;
void input(score *p,int s);//输入
void aver(score *p,int n);//平均成绩
void output(score *p,int n);//输出
void main()
{
int n;
score *p;
cout<<"学生数:";cin>>n;
p=new score[n];
for(int i=0;i<n;i++)
input(p,i);
aver(p,n);
for(int j=0;j<n;j++)
p[j].print_score();

}
void input(score *p,int s)
{
char *na;
char nm[10];
int num;
cout<<"第"<>nm;
na=nm;
p[s].set_id(na);
cout<<"修读门数:";cin>>num;
char *b[10];
float *ar;
ar=new float[num];
for(int j=0;j {
cout>nm;b[j]=nm;
cout<<"成绩为:";cin>>ar[j];
}
p[s].set_score(ar,num);
p[s].set_book(b);
p[s].print_score();

}
void aver(score *p,int n)
{
float av,sum=0;
for(int i=0;i<n;i++)
sum+=p[i].get_aver();
av=sum/n;
cout<<n<<"人的平均成绩为:"<<av<<endl;
}
void output(score *p,int n)
{
for(int i=0;i<n;i++)
p[i].print_score();
}
这是测试函数
学生数:1
第1个学生的id:312
修读门数:1
第1科名称:语文
成绩为:78
语文成绩:78 aver=78
1人的平均成绩为:78
烫烫烫烫烫烫烫烫成绩:78 aver=78
Press any key to continue
这是输出

  • 写回答

1条回答 默认 最新

  • qq_34495994 2019-06-27 11:54
    关注

    定义输入的是地址,调用的时候也是取地址,数组名就是地址,其他的得取地址符号&。如下
    input(&p,i);

    评论

报告相同问题?

悬赏问题

  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥30 python代码,帮调试,帮帮忙吧
  • ¥15 #MATLAB仿真#车辆换道路径规划