-2

我需要从 K (学生人数)得到结果,但如果 2 ...程序用(如果 K = 2)两个数字填充数组中的所有 30 个位置,其他 28 个是某种 38392839238 .. .some像这样,这是我的代码:

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

4

1 回答 1

0

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

您的第一个循环将值分配给顶部k元素,但在其中case '2'您有一个循环对整个数组进行排序和输出。这是未定义的行为,因为您正在从数组的未分配元素中读取。

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

sort(m, m+k);
for(i=0;i<k;++i)
    cout<<"\n"<<m[i]<<' ';
}
于 2012-11-12T18:04:52.403 回答