我需要从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
答案 0 :(得分:0)
您看到的问题与读取尚未初始化的数组元素有关,因此包含垃圾值。
你的第一个循环为顶级k
元素赋值,但在case '2'
内你有一个循环来排序并输出整个数组。这是未定义的行为,因为您正在从数组的未分配元素中读取。
使用k
代替e
可以解决此问题:
sort(m, m+k);
for(i=0;i<k;++i)
cout<<"\n"<<m[i]<<' ';
}