-2

K(学生の数)から結果を取得する必要がありますが、ケース2 ...プログラムが配列内の30の場所すべてを(K = 2の場合)2つの数で埋め、他の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;

}
 }

このプログラムでは、クラスの生徒数を入力し、その後、クラスの生徒数を入力します。CASE2 iでは、生徒を昇順で作成する必要があります。例:クラスの生徒数: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 に答える