我输入了4个数,但是输出只有3个数,这是什么原因?
输入5个数,输出有4个数。
template <class T>
void SeqList<T>::SeqList_cin(T x)
{
int i = 0;
int a[Maxsize]{};
char c;
while (x) //输入回车结束循环
{
a[i] = x;
i++;
cin >> x;
if (c = getchar() == '\n') break;
}
length = i;
for (int j = 0; j < length; j++)
{
data[j] = a[j];
}
}
int main()
{
int x1;
int i = 0;
cout << "请为无参顺序表输入数据" << endl;
cin >> x1;
//为顺序表添加元素,通过键盘输入
L1.SeqList_cin(x1);
}
把代码粘贴全,之后才能分析问题!!!!
逻辑乱了, 最好把输入和初始化分开, 在调用SeqList_cin之前就把要插入的数据输入好, 直接传递过去.
你这里的while我是没看懂
#include<iostream>
using namespace std;
const int Maxsize = 100;
template <class T>
class SeqList
{
private:
T data[Maxsize]; //存放数据元素的数组//
int length; //线性表长度//
public:
SeqList(); //创建一个空顺序表//
SeqList(T a[], int n); //有参创建
void SeqList_cin(T x); //将数据元素传给顺序表
void Insert(int i, T x); //插入操作,在第i个位置插入值为x的元素
T Delete(int i); //删除操作,删除第i个元素
void PrintList(); //遍历操作,按序号输出各元素
~SeqList() {};
};
//无参创建实现
template <class T>
SeqList<T>::SeqList()
{
length = 0;
}
//有参创建实现
template <class T>
SeqList<T>::SeqList(T a[], int n)
{
if (n > Maxsize)
throw "数据不合法";
for (int i = 0; i < n; i++)
{
data[i] = a[i];
}
length = n;
}
//传递数据实现
template <class T>
void SeqList<T>::SeqList_cin(T x)
{
int i = 0;
int a[Maxsize]{};
char c;
while (x) //输入回车结束循环
{
a[i] = x;
i++;
cin >> x;
if (c = getchar() == '\n') break;
}
length = i;
for (int j = 0; j < length; j++)
{
data[j] = a[j];
}
}
//插入操作实现
template <class T>
void SeqList<T>::Insert(int i, T x)
{
if (length == Maxsize)
throw "上溢";
if (i<1 || i>length + 1)
throw "插入位置出错";
for (int j = length; j >= i; j--)
{
data[j + 1] = data[j];
}
data[i-1] = x;
length++;
}
//删除操作实现
template<class T>
T SeqList<T>::Delete(int i)
{
T x;
if (length == 0)
throw "下溢";
if (i<1 || i>length)
throw "删除位置错误";
x = data[i - 1]; //取出位置i的元素
for (int j = i; j < length; j++)
data[j - 1] = data[j];
length--;
return x;
}
//遍历操作实现
template<class T>
void SeqList<T>::PrintList()
{
for (int i = 0; i < length; i++)
{
cout << data[i] << " ";
}
}
int main()
{
int a[Maxsize]{}; //数组初始化为0
int n, x;
cout << "请为有参顺序表输入长度" << endl;
cin >> n; //建立长度为n的顺序表
cout << "请为有参顺序表输入数据" << endl;
for (int i = 0; i < n; i++) //有参构造函数准备
{
cin >> x; //将数据元素放置在数组a[n]中
a[i] = x; //测试数据使用1,2,3,4,5,6,7,8,9
}
SeqList<int> L(a, n);
cout << "输出当前线性表" << endl;
L.PrintList();
cout << endl;
SeqList<int> L1;
int x1;
int i = 0;
cout << "请为无参顺序表输入数据" << endl;
cin >> x1;
//为顺序表添加元素,通过键盘输入
L1.SeqList_cin(x1);
//测试数据使用1,2,3,4,5,6,7,8,9
cout << "输出当前线性表" << endl;
//输出当前线性表
L1.PrintList();
cout << endl;
//在位置locate处插入元素num
int locate;
int num;
cout << "请输入插入位置与元素" << endl;
//测试数据为4,10
cin >> locate>>num;
L.Insert(locate,num);
L1.Insert(locate, num);
cout << "当前有参线性表" << endl;
L.PrintList();
cout << endl;
cout << "当前无参线性表" << endl;
L1.PrintList();
cout << endl;
int del_locate;
cout << "请输入删除元素位置"<<endl;
cin >> del_locate; //删除元素位置,测试位置使用4
L.Delete(del_locate); //删除元素函数调用
L1.Delete(del_locate);
cout << "有参顺序表遍历" << endl;
L.PrintList(); //遍历操作
cout << endl;
cout << "无参顺序表遍历" <<endl;
L1.PrintList();
return 0;
}