c++ 求大师解答错误
#include<iostream>usingnamespacestd;template<typenameT>intsort(T*data,longnum){if(num...
#include <iostream>
using namespace std;
template <typename T>
int sort(T *data,long num)
{
if(num==0)
return 0;
T temp;
for(int pass=1;pass<num;pass++)
{
for(int i=0;i<num-pass;i++)
{
if(data[i]>data[i+1])//进行交换
{
temp=data[i];
data[i]=data[i+1];
data[i+1]=temp;
}
}
}
return 1;
}
void main( )
{
int N,choice;
cout<<"请输入要排序的数的个数:"<<endl;
cin>>N;
cout<<"请输入数据类型:"<<endl;
cout<<"1--int型"<<endl<<"2--float型"<<endl<<"3--double型"<<endl;
cin>>choice;
switch(choice)
{
case 1:
int *data=new int[N];
cout<<"请输入"<<N<<"个整数(每输入一个数即回车):"<<endl;
break;
case 2:
cout<<"请输入"<<N<<"个float数(每输入一个数即回车):"<<endl;
float *data=new float[N];
break;
case 3:
cout<<"请输入"<<N<<"个double数(每输入一个数即回车):"<<endl;
double *data=new double[N];
break;
default:
cout<<"未知数据类型!"<<endl;
}
for(int i=0;i<N;i++)
cin>>data[i];
cout<<"输入结束!"<<endl;
int flag=sort(data,N);
if(flag!=0)
{
for(int i=0;i<N;i++)
cout<<data[i]<<" ";
cout<<endl;
}
delete []*data;
} 展开
using namespace std;
template <typename T>
int sort(T *data,long num)
{
if(num==0)
return 0;
T temp;
for(int pass=1;pass<num;pass++)
{
for(int i=0;i<num-pass;i++)
{
if(data[i]>data[i+1])//进行交换
{
temp=data[i];
data[i]=data[i+1];
data[i+1]=temp;
}
}
}
return 1;
}
void main( )
{
int N,choice;
cout<<"请输入要排序的数的个数:"<<endl;
cin>>N;
cout<<"请输入数据类型:"<<endl;
cout<<"1--int型"<<endl<<"2--float型"<<endl<<"3--double型"<<endl;
cin>>choice;
switch(choice)
{
case 1:
int *data=new int[N];
cout<<"请输入"<<N<<"个整数(每输入一个数即回车):"<<endl;
break;
case 2:
cout<<"请输入"<<N<<"个float数(每输入一个数即回车):"<<endl;
float *data=new float[N];
break;
case 3:
cout<<"请输入"<<N<<"个double数(每输入一个数即回车):"<<endl;
double *data=new double[N];
break;
default:
cout<<"未知数据类型!"<<endl;
}
for(int i=0;i<N;i++)
cin>>data[i];
cout<<"输入结束!"<<endl;
int flag=sort(data,N);
if(flag!=0)
{
for(int i=0;i<N;i++)
cout<<data[i]<<" ";
cout<<endl;
}
delete []*data;
} 展开
2个回答
展开全部
我先给你说下你的错误点,然后给你个写代码的思路,其实先我寻摸着想把全部代码贴给你,但是一想感觉那样对你没啥用,还是给你讲讲错误,然后再给你讲讲思路吧:
你这段程序有两个原则性的错误,分别如下:
1. 在case中,最好不要声明变量,如果必须要声明在case中,绝对绝对不能在这个case之外的地方调用这个变量,如果一定呀声明应该是这样的:
...
...
case ** :
{
int .....;
}
break;
...
...
就是必须用花括号括起来强调这个变量仅在这个case范围作用域内可用;
2. 在case里面最好不要new空间,如果真的不幸一定要new出来,一定要在该case的范围中把它们delete;
如果不想在这个case里面delete,那一定要再在下面建立一个switch语句,在相同的case值中delete,必须!
千万不要在case里面new,在case外面delete,你想想,万一用户输入失误,出现5怎么办?那你没有new就delete,如果没有先把该指针置为NULL,程序就会崩溃;而且而且,在switch之前你没有声明data,万一用户输入的是5,后面的代码怎么来识别data呢?
此外,还有个设计上的错误,这里也就顺带给你讲正确的设计思路了哈:
你能想到用模版来处理不同的数据类型这个很好,而且你的模版函数目测写的应该没啥大问题,我没测试过哈,但是整段程序你是为了用模版而用模版,就不对了。
你既然想到了用switch来区分用户期望输入的数据类型,为什么不再想远点?索性就在case中间来调用你的模版:
1. 用户输入的所有数据,你先用string来储存,然后自己分别写几个函数(当然这里也可以只用一个模版函数,不过需要一些技巧)来把字符串转化成int,double等;
2. 在case中new一块内存,然后赋值为用户输入的值;
3. 调用你的模版函数;
4. 切记切记,在case结束之前delete你new出来的东东;
5. break;
ok,就上面这些,都说道这个份儿上了,就差直接贴代码了,相信你应该可以写出来了
如果有什么细节问题你可以追问,但是如果你说你完全找不到突破口,我就不打算再回答了
你这段程序有两个原则性的错误,分别如下:
1. 在case中,最好不要声明变量,如果必须要声明在case中,绝对绝对不能在这个case之外的地方调用这个变量,如果一定呀声明应该是这样的:
...
...
case ** :
{
int .....;
}
break;
...
...
就是必须用花括号括起来强调这个变量仅在这个case范围作用域内可用;
2. 在case里面最好不要new空间,如果真的不幸一定要new出来,一定要在该case的范围中把它们delete;
如果不想在这个case里面delete,那一定要再在下面建立一个switch语句,在相同的case值中delete,必须!
千万不要在case里面new,在case外面delete,你想想,万一用户输入失误,出现5怎么办?那你没有new就delete,如果没有先把该指针置为NULL,程序就会崩溃;而且而且,在switch之前你没有声明data,万一用户输入的是5,后面的代码怎么来识别data呢?
此外,还有个设计上的错误,这里也就顺带给你讲正确的设计思路了哈:
你能想到用模版来处理不同的数据类型这个很好,而且你的模版函数目测写的应该没啥大问题,我没测试过哈,但是整段程序你是为了用模版而用模版,就不对了。
你既然想到了用switch来区分用户期望输入的数据类型,为什么不再想远点?索性就在case中间来调用你的模版:
1. 用户输入的所有数据,你先用string来储存,然后自己分别写几个函数(当然这里也可以只用一个模版函数,不过需要一些技巧)来把字符串转化成int,double等;
2. 在case中new一块内存,然后赋值为用户输入的值;
3. 调用你的模版函数;
4. 切记切记,在case结束之前delete你new出来的东东;
5. break;
ok,就上面这些,都说道这个份儿上了,就差直接贴代码了,相信你应该可以写出来了
如果有什么细节问题你可以追问,但是如果你说你完全找不到突破口,我就不打算再回答了
2012-09-26
展开全部
data没有声明变量?
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询