我这个switch语句错在哪里呀

来源:百度知道 编辑:UC知道 时间:2024/06/14 10:05:25
当输入c=1的时候可以正常输出,但是c=2的时候有系统错误
#include<iostream.h>
#include<stdlib.h>
#define MAX 100

int getdata(int a[]);
void output(int a[],int first,int last);
void strainsert(int a[20],int n); //简单插入排序
void smpsele(int a[20],int n); //简单选择排序

void main()
{
int arr[MAX],n;
n=getdata(arr);
cout<<"原数组的顺序是:"<<endl;
output(arr,1,n);
cout<<endl;
int c=1;
while(c!=0)
{
cout<<" 请选择要的排序类型: "<<endl;
cout<<" 0 表示结束 "<<endl;
cout<<" 1 简单插入排序 "<<endl;
cout<<" 2 简单选择排序 "<<endl;

cin>>c;

switch(c)
{
case 1: strainsert(arr, n); cout<<"简单插入排序:"<<endl; output(arr,1,n); break;
case 2: smpsele(arr,n); cout<<"简单选择排序:"<<endl;

选择排序函数中的:

for(int i;i<=n-1;i++)
改为
for(int i=1;i<=n-1;i++)

cin>>c; //这里吧!

switch(c)
{
case 1: strainsert(arr, n); cout<<"简单插入排序:"<<endl; output(arr,1,n); break;
case 2: smpsele(arr,n); cout<<"简单选择排序:"<<endl; output(arr,1,n);break;
default:cout<<"输入c错误";

switch(c)
{
case 0: return;// 如果输入0直接返回,不然会打印输入错误再退出
case 1: strainsert(arr, n); cout<<"简单插入排序:"<<endl; output(arr,1,n); break;

未初始化简单选择排序 i的值
void smpsele(int a[],int n) //简单选择排序
{
for(int i=0;i<=n-1;i++)
{
int m=i;
int small=a[i];
for(int j=i+1;j<=n;j++)
if(a[j]<small)
{
small=a[j];
m=j;
}
int t=a[i];
a[i]=a[m];
a[m]=t;
}
}