数组未定义

#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;

int n,m;
n=3,m=3;
string *std = new string[n];
string *cls = new string[m];
int (*src)[m] = new int [n][m];

void main()
{
cout<<"请输入学生个数:"<<endl;
cin>>n; //改变n的大小
cout<<"请输入功课数:"<<endl;
cin>>m; //改变m的大小
inputscore();
studentaverage();
classaverage();
highest();
delete []std;
delete []cls;
delete []src;
}

void inputscore()
{
for(int a=0;a<m;a++)
{
cout<<"请输入科目"<<a+1<<"的名称:"<<endl;
cin>>cls[a];
}
for(int i=0;i<n;i++)
{
cout<<"请输入第"<<i+1<<"个学生姓名:"<<endl;
cin>>std[i];
cout<<"请输入学生成绩:"<<endl;
for(int j=0;j<m;j++)
{
cin>>src[i][j];
}
}
}

void studentaverage()
{
int aver1=0,sum1=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
sum1=sum1+src[i][j];
}
aver1=sum1/m;
cout<<std[i]<<"的平均分是:"<<aver1<<endl;
sum1=0;
aver1=0;
}
}

void classaverage()
{
int aver2=0,sum2=0;
for(int j=0;j<m;j++)
{
for(i=0;i<n;i++)
{
sum2=sum2+src[i][j];
}
aver2=sum2/n;
cout<<cls[j]<<"的平均分:"<<aver2<<endl;
sum2=0;
aver2=0;
}
}

void highest()
{
int high=0,num=0;
for(int j=0;j<m;j++)
{
for(int i=0;i<n;i++)
{
if(high<src[i][j])
{high=src[i][j];
num=i;
}
}
cout<<cls[j]<<"的最高分:"<<endl;
cout<<std[num]<<"是最高分"endl;
high=0;
num=0;
}
}
总说数组未定义,完了>>输入号有的还说不对了,怎么回事啊

数组确实没有定义,首先是这里一段:

int n,m;
n=3,m=3;  
string *std = new string[n];  
string *cls = new string[m];
int (*src)[m] = new int [n][m];

你在这里定义了几个全局变量,当然也为他们赋了初值,部分上说也就是

:std 字符串数组3个大小

:cls 字符串数组3个大小

然后,在下一段程序里:

cout<<"请输入学生个数:"<<endl;
  cin>>n;    //改变n的大小
  cout<<"请输入功课数:"<<endl;
  cin>>m;    //改变m的大小

你选择了改变m,n的大小,虽然这些都改变了,可是作为全局变量的字符串数组std或cls的大小都没改变,这样就出现了没有定义数组的错误。


改动措施:输入m,n后使用new 动态分配字符串数组,那样就不会出错了。


PS:

你的程序真差。

追问

C++都好久不动了,忘得已经差不多了。

如果把上面的全局放回下面动态分配,子函数调用不了了啊?
还有那个>>,<<出错是怎么回事啊?
大神谢谢教导Q.Q

追答

在主函数里,申明两个字符串数组,然后动态分配就可以了:

main()
{
  int n=3,m=3;
  string *std,*cls;
  cout<<"请输入学生个数:"<<endl;
  cin>>n;    //改变n的大小
  std=new string[n]; //动态分配
  cout<<"请输入功课数:"<<endl;
  cin>>m;    //改变m的大小
  int (*src)[m] = new int [n][m]
  cls=new string[m];
  inputscore(std,cls,src,n,m);//里面参数照实际而定
  studentaverage(std,cls,src,n,m);
  classaverage(std,cls,src,n,m);
  highest(std,cls,src,n,m);
  delete []std;
  delete []cls;
  delete []src;
}

至于不使用全局变量,你可以各个函数的参数改动一下。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-06-27
oh no what's that?

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网