鱼尾夹做手机支架:请C++高手来帮帮忙,看看这个程序有什么问题啊。谢谢了!

来源:百度文库 编辑:查人人中国名人网 时间:2024/05/06 01:40:24
#include<iostream>
#include<string>
using namespace std;
class students
{
private:
string name;
int number;
public:
void getdata()
{
cout<<"请输入学号:";
cin>>number;
cout<<"请输入学生姓名:";
cin>>name;
}
void showdata()
{
cout<<" "<<number<<" "<<name<<" ";
}
};
class mark:public students
{
public:
int English,Maths,Chinese,Total;
public:
void getdata()
{
students::getdata();
cout<<"请输入学生英语成绩:";
cin>>English;
cout<<"请输入学生语文成绩:";
cin>>Chinese;
cout<<"请输入学生数学成绩:";
cin>>Maths;
}
void sumdata()
{
Total=English+Maths+Chinese;
}
void showdata()
{
students::showdata();
cout<<English<<" "<<Chinese<<" "<<Maths<<" "<<Total<<endl;
}
};
int main()
{
int n=0;
int sumMaths=0;
int sumEnglish=0;
int sumChinese=0;
float Eaverage,Maverage,Caverage;
char choice;
const MAX=50;
mark stu[MAX];

do
{
stu[n].getdata();
sumMaths+=stu[n].Maths;
sumChinese+=stu[n].Chinese;
sumEnglish+=stu[n].English;
stu[n].sumdata();
n++;
done:
cout<<"请选择是否继续(Y/N):";
cin>>choice;
if(choice!='y'&&choice!='n')
{
cout<<"Please choice y or n:"<<endl;
goto done;
}
}
while(choice!='n');
Eaverage=sumEnglish/n;
Maverage=sumMaths/n;
Caverage=sumChinese/n;
cout<<"┏━━┳━━┳━━┳━━┳━━┳━━━┓"<<endl;
cout<<"┃"<<"学号"<<"┃"<<"姓名"<<"┃"<<"英语"<<"┃"<<"语文"<<"┃"<<"数学"<<"┃"<<"Total"<<" ┃"<<endl;
cout<<"┗━━┻━━┻━━┻━━┻━━┻━━━┛"<<endl;
for(n=0;n<MAX;n++)
{
stu[n].showdata();
stu[n].sumdata();
}
cout<<"英语平均成绩:"<<Eaverage<<endl;
cout<<"数学平均成绩:"<<Maverage<<endl;
cout<<"语文平均成绩:"<<Caverage<<endl;

return 0;
}

这个可以运行,看了半天没发现什么大问题,但是运行之后回出现很多85899460这串数字,不明白怎么回事,希望高手帮忙看看是怎么回事。另外这个代码不能在VC++下面运行的吗?有高手可以改写成VC++下面运行的代码吗?谢谢了!

这段代码可以在VC下运行:
错误在于你打打印的时候,打印了所有的数量为MAX的学生。
应该打印数量为n的学生。

#include<iostream>
#include<string>
using namespace std;
class students
{
private:
string name;
int number;
public:
void getdata()
{
cout<<"请输入学号:";
cin>>number;
cout<<"请输入学生姓名:";
cin>>name;
}
void showdata()
{
cout<<" "<<number<<" "<<name<<" ";
}
};
class mark:public students
{
public:
int English,Maths,Chinese,Total;
public:
void getdata()
{
students::getdata();
cout<<"请输入学生英语成绩:";
cin>>English;
cout<<"请输入学生语文成绩:";
cin>>Chinese;
cout<<"请输入学生数学成绩:";
cin>>Maths;
}
void sumdata()
{
Total=English+Maths+Chinese;
}
void showdata()
{
students::showdata();
cout<<English<<" "<<Chinese<<" "<<Maths<<" "<<Total<<endl;
}
};
int main()
{
int n=0;
int sumMaths=0;
int sumEnglish=0;
int sumChinese=0;
float Eaverage,Maverage,Caverage;
char choice;
const MAX=50;
mark stu[MAX];

do
{
stu[n].getdata();
sumMaths+=stu[n].Maths;
sumChinese+=stu[n].Chinese;
sumEnglish+=stu[n].English;
stu[n].sumdata();
n++;
done:
cout<<"请选择是否继续(Y/N):";
cin>>choice;
if(choice!='y'&&choice!='n')
{
cout<<"Please choice y or n:"<<endl;
goto done;
}
}
while(choice!='n');
Eaverage=sumEnglish/n;
Maverage=sumMaths/n;
Caverage=sumChinese/n;
cout<<"┏━━┳━━┳━━┳━━┳━━┳━━━┓"<<endl;
cout<<"┃"<<"学号"<<"┃"<<"姓名"<<"┃"<<"英语"<<"┃"<<"语文"<<"┃"<<"数学"<<"┃"<<"Total"<<" ┃"<<endl;
cout<<"┗━━┻━━┻━━┻━━┻━━┻━━━┛"<<endl;
/*for(n=0;n<MAX;n++)
{
stu[n].showdata();
stu[n].sumdata();
}*/
for(int num =0;num<n;num++)
{
stu[num].showdata();
stu[num].sumdata();
}

cout<<"英语平均成绩:"<<Eaverage<<endl;
cout<<"数学平均成绩:"<<Maverage<<endl;
cout<<"语文平均成绩:"<<Caverage<<endl;

return 0;
}

这个程序可以在vc6下直接编译 我刚才试了 你就新建一个控制台程序的工程 然后把这个文件加到里面就行了

后面的数字是因为你输出的时候循环次数太多了

for(n=0;n<MAX;n++)
{
stu[n].showdata();
stu[n].sumdata();
}
这里的MAX是个常量50 所以如果你后面没有50个记录 他只能输出无意义得值了 这里的判断条件应该是你实际输入纪录的多少

我就看了上面几行就发现有问题了,你的私有变量如何可以输出呢~~所以建议你再好好检查一下。

挺好,这个程序改得很好!