C++模板类输入数据遇到回车停止,最后一位数据丢失

我输入了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);
}

img

把代码粘贴全,之后才能分析问题!!!!

逻辑乱了, 最好把输入和初始化分开, 在调用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;
}