获取要在排序中使用的数组的值?

时间:2012-11-12 17:58:39

标签: c++

我需要从K(学生人数)得到结果,但是在案例2中...程序填满阵列中的所有30个位置(如果K = 2)两个数字,其他28个是某种38392839238。这样的事情,这是我的代码:

int main()
  {
int i,n,k;
unsigned int m[30], a[30], b[30];
int ch=0, nech=0;
cout<<"Number of students (max30)";cin>>k;
for(i=0; i<k; ++i)
{
    cout<<i+1<<". Student number: ";
    do
    {
        cin>>m[i];
    }
    while(!(m[i]>=1e7 && m[i]<1e8));
    if(m[i]%2==0)
    {
        a[ch]=m[i]; ch++;
    }
    else 
    {
        b[nech]=m[i]; nech++;
    }
}
cout<<endl;
cout<<"\nAll numbers: "<<endl;
for(i=0; i<k; ++i)
    cout<<m[i]<<"\t";
    loop:
cout<<endl;
cout<<"\nChoose 1 to see Even and Odd numbers: ";
cout<<"\nChoose 2 to see ascending order: ";
cout<<"\nChoose 3 to exit: ";
cout<<"\nEnter Your choise: "; cin>>n;
switch(n)
{

case 2:
    {
        {
        int e=sizeof(m) / sizeof(m[0]);
        sort(m,m+e);
        for(i=0;i<e;++i)
            cout<<"\n"<<m[i]<<' ';
        }
    }
    goto loop;

}
 }

这个程序想要输入课堂上的学生数量,之后想要在课堂上输入他们的数字,在案例2中我需要按升序排列。例如: 上课学生人数:2  1.学号:12345678  2.学号:55555555

当你为case2命中2时,它需要按升序排列,因此结果必须是: 12345678 55555555 (从最小到最大)。 我的程序可以实现,但是在其他28个地方(我的数组必须是最多30个)它放了另一个数字= 3435973836

1 个答案:

答案 0 :(得分:0)

您看到的问题与读取尚未初始化的数组元素有关,因此包含垃圾值。

你的第一个循环为顶级k元素赋值,但在case '2'内你有一个循环来排序并输出整个数组。这是未定义的行为,因为您正在从数组的未分配元素中读取。

使用k代替e可以解决此问题:

sort(m, m+k);
for(i=0;i<k;++i)
    cout<<"\n"<<m[i]<<' ';
}