不接的测试结果,求解释
#include<iostream.h>
#include<string.h>
int j,i;
class Tstudent
{
public:
void Init(char *st_no,char *name, float score1[]);
void show();
//float *getscore();
float getavg();
friend void trans(Tstudent &st);
private:
char *sno;
char *name;
float score[3];
float avg;
float sum;
char level[10];
};
void Tstudent::Init(char *st_no,char *name,float score1[])
{
sno=new char[strlen(st_no)+1];
strcpy(sno,st_no);
name=new char[strlen(name)+1];
strcpy(name,name);
float sum=0;
for( i=0;i<3;i++)
{
score[i]=score1[i];
sum=sum+score[i];
}
avg=sum/3;
}
float Tstudent:: getavg()
{
return avg;
}
/* float * Tstudent::getscore()
{
return score;
}*/
void Tstudent::show()
{
for(int i=0;i<3;i++)
cout<<score[i]<<" ";
cout<<endl;
cout<<sum<<endl;
cout<<avg<<endl;
cout<<level<<endl;
}
void trans(Tstudent &st)
{
switch(int(st.avg/10))
{
case 6:strcpy(st.level,"及格");
break;
case 7:
strcpy(st.level,"中");break;
case 8: strcpy(st.level,"良");break;
case 9:
case 10:strcpy(st.level,"优");
break;
default: strcpy(st.level,"不及格");
break;
}
}
/*
void Tstudent:: trans()
{
switch(getavg()/10)
{
case 6:strcpy(level,"及格");
break;
case 7:
strcpy(level,"中");break;
case 8:strcpy(level,"良");break;
case 9:
case 10:strcpy(level,"优");
break;
default: strcpy(level,"不及格");
break;
}
}*/
void main()
{
char sno[5];
char sname[10];
float score[3];
Tstudent st[2];
for( i=0;i<2;i++)
{
//cout<<"请输入学号"<<endl;
cin>>sno>>sname;
//cout<<"请输入姓名"<<endl;
//cout<<"请输入三科成绩"<<endl;
for( j=0;j<3;j++)
{
cin>>score[j];
cout<<score[j]<<endl;
}
st[i].Init(sno,sname,score);
}
for(int k=0;k<2;k++)
trans(st[i]);
for( j=0;j<2;j++)
st[i].show();
/*for(int i;i<3;i++)
{
for(intj=0;j<5;j++)
avg[i]+=s[j].getscore().[i];
cot<<"avg["<<i<<"]="avg[i]/5<<" ";
}
*/
}
各位长辈看到后请调试一下,该怎么改啊
[解决办法]
问题很多,最主要的是j和i定义成了全局变量,这导致无论哪个地方对i进行修改,都会影响其他地方(主要是循环),调整后代码如下:
#include<iostream>
#include<string>
using namespace std;
class Tstudent
{
public:
void Init(char *st_no,char *name, float score1[]);
void show();
float getavg();
friend void trans(Tstudent &st);
private:
char *sno;
char *name;
float score[3];
float sum;
float avg;
char level[10];
};
void Tstudent::Init(char *st_no,char *name,float score1[])
{
sno=new char[strlen(st_no)+1];
strcpy(sno,st_no);
name=new char[strlen(name)+1];
strcpy(name,name);
sum = 0;
for( int i=0;i<3;i++)
{
score[i]=score1[i];
sum=sum+score[i];
}
avg=sum/3;
}
float Tstudent:: getavg()
{
return avg;
}
void Tstudent::show()
{
for(int i=0;i<3;i++)
cout<<score[i]<<" ";
cout<<endl;
cout<<sum<<endl;
cout<<avg<<endl;
cout<<level<<endl;
}
void trans(Tstudent &st)
{
switch(int(st.avg/10))
{
case 6:strcpy(st.level,"及格");
break;
case 7:
strcpy(st.level,"中");
break;
case 8: strcpy(st.level,"良");
break;
case 9:
case 10:strcpy(st.level,"优");
break;
default: strcpy(st.level,"不及格");
break;
}
}
void main()
{
char sno[5];
char name[10];
float score[3];
Tstudent st[2];
for(int i=0;i<2;i++)
{
cout<<"请输入学号"<<endl;
cin>>sno;
cout<<"请输入姓名"<<endl;
cin>>name;
cout<<"请输入三科成绩"<<endl;
for(int j=0;j<3;j++)
{
cin>>score[j];
}
st[i].Init(sno,name,score);
}
for(int k=0;k<2;k++)
trans(st[k]);
for(int j=0;j<2;j++)
st[j].show();
}