首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

不接的测试结果,求解释,该怎么解决

2013-01-28 
不接的测试结果,求解释#includeiostream.h#includestring.hint j,iclass Tstudent{public:void Init(

不接的测试结果,求解释
#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();
}

热点排行