C++ 程序中模板类型的输入打印错误
下面是我的程序的代码片段和模板。它没有错误,但当我打印时,它会生成错误的结果。请告诉我哪里错了,我如何解决这个问题。下面是C++代码,它具有三个功能,主要功能是模板T.<C++ 程序中模板类型的输入打印错误,c++,templates,C++,Templates,下面是我的程序的代码片段和模板。它没有错误,但当我打印时,它会生成错误的结果。请告诉我哪里错了,我如何解决这个问题。下面是C++代码,它具有三个功能,主要功能是模板T.< #include<iostream> using namespace std; template<typename T> void input(T* &start, int size){ start = new T[size]; T* beyond = &start[s
#include<iostream>
using namespace std;
template<typename T>
void input(T* &start, int size){
start = new T[size];
T* beyond = &start[size];
while(start != beyond){
cout<<"\nEnter: ";
cin>>*start;
start++;
}
}
template<typename T>
void sort(T* start, int size){
T hold;
for(int j=0; j<size-1; j++){
for(int i=0; i<size-1; i++){
if(start[i]>start[i+1]){
hold=start[i];
start[i]=start[i+1];
start[i+1]=hold;
}
}
}
}
template<typename T>
void display(T* start, int size){
T* beyond = &start[size];
cout<<"\nAfter Sorting: "<<endl;
while(start != beyond){
cout<<*start<<"\t";
start++;
}
}
int main(){
int* x=NULL;
float* y=NULL;
char* z=NULL;
int size;
cout<<"Enter the number of elements: ";
cin>>size;
cout<<"\nEnter integer values:";
input<int>(x, size);
sort<int>(x, size);
display<int>(x, size);
/**
cout<<"\nEnter floating values:";
input<float, int>(y, size);
sort<float, int>(y, size);
display<float, int>(y, size);
cout<<"\nEnter character values:";
input<char, int>(z, size);
sort<char, int>(z, size);
display<char, int>(z, size);
*/
system("pause");
}
#包括
使用名称空间std;
模板
无效输入(T*&开始,整数大小){
开始=新的T[尺寸];
T*beyond=&start[size];
while(开始!=超越){
无法启动;
启动++;
}
}
模板
无效排序(T*开始,整数大小){
T持有;
对于(int j=0;j您可以这样做:
template<typename T>
void input(T* &start, int size){
start = new T[size];
//T* beyond = &start[size-1];
//while(start <= beyond){
for(int i=0;i<size;i++){
cout<<"\nEnter: ";
cin>>start[i];
//start++;
}
//}
}
模板
无效输入(T*&开始,整数大小){
开始=新的T[尺寸];
//T*beyond=&start[size-1];
//当(start在输入
函数中分配内存并将其置于开始
时。然后将该指针移到末尾,该结束值将返回给调用函数。然后尝试将其用作其他方法的开始,这将导致未定义的行为
template<typename T>
void input(T* &start, int size){
start = new T[size]; // points to the start
T* beyond = &start[size];
while(start != beyond){
cout<<"\nEnter: ";
cin>>*start;
start++; // Moving all the time...
}
// In the end start points to beyond and main gets that as a result
}
模板
无效输入(T*&开始,整数大小){
开始=新的T[size];//指向开始
T*beyond=&start[size];
while(开始!=超越){
无法启动;
开始+++;//一直在移动。。。
}
//最终,起点指向beyond,结果main得到了这一点
}
如果你真的想玩指针,你可以很容易地修复它:
template<typename T>
void input(T* &start, int size){
start = new T[size];
T* beyond = &start[size];
T* curr = start;
while(curr != beyond){
cout<<"\nEnter: ";
cin>>*curr;
curr++;
}
}
模板
无效输入(T*&开始,整数大小){
开始=新的T[尺寸];
T*beyond=&start[size];
T*curr=开始;
while(curr!=超出){
cout*curr;
curr++;
}
}
这样,start
指针将始终指向开始,并正确返回到调用函数
在调试器中一步一步地运行将很容易显示此问题。此外,请始终描述此问题,如果您不解释正确的结果是什么,或者使用某些输入得到的结果是什么,我们不知道“生成错误的结果”是什么意思。这不起作用。“大小-1”在进行输入时,再消除1个要输入的值。我已编译。不,这不是问题。Beyond作为数组后的一个步骤正确计算。使用for循环开始[I]是一种旧方式。我想递增指针地址。@SaveraChughtai没有“旧方式”关于它。正如你所看到的,摆弄指针只会让你头疼。尽管如此,对于循环,我的程序的实际问题是什么?为什么它会给出惊人的结果?plz“生成错误的结果”什么是错误的结果?什么是正确的结果?对不起,先生,我不明白您所说的。请您给我一个代码示例。谢谢
template<typename T>
void input(T* &start, int size){
start = new T[size];
T* beyond = &start[size];
T* curr = start;
while(curr != beyond){
cout<<"\nEnter: ";
cin>>*curr;
curr++;
}
}