潜渊@龙 2021-11-07 18:45 采纳率: 100%
浏览 28
已结题

字节读取问题,读取字节为负数,程序无法运行,

#include<iostream>
using namespace std;
typedef int DataType;
#define MAX 100
//#pragma warning(disable:6385)
//#pragma warning(disable:6386)
//#pragma warning(push)
//#pragma warning(pop)
class List
{
public:
    void InitList(List &L);
    void Length(List& L);
    void CreateList(List &Li,int n);
    void Insert(List& L,DataType x, int i);
    void Deleted(List& L,int i);
    void Locate(List& L,DataType x);
    DataType Get(List& L,int i);
    void printList(List& L);
private:
    DataType arr[MAX];
    int length;
};
void List::InitList(List& L)
{
    L.length = 0;
}
void List::CreateList(List& Li, int n)
{
    if (n<0&&n>MAX)
    {
        cout << "初始化失败!" << endl;
    }
    else
    {
        for (int i = 0; i < n; i++)
        {
            cin >> Li.arr[i];
            Li.length++;
        }
    }
}
//在线性表的第i个数据元素之前插入一个新的数据元素x
void List::Insert(List& L,DataType x,int i)
{
    int j;
    if (length > MAX)
    {
        cout << "overflow!" << endl;
    }
    else if ((i<0&&i>length+1))
    {
        cout << "position is error!" << endl;
    }
    else
    {
        for (j = L.length; j >= i; j--)
        {
            L.arr[j] =L.arr[j - 1];
        }
        L.arr[i - 1] = x;
        length++;
    }
}
//删除第i个位置
void List::Deleted(List& L,int i)
{
    //int j=0;
     if ((i<0 && i>L.length ))
    {
        cout << "position is error!" << endl;
    }
     else
     {
         for (int j = i; j <L.length; j++)
         {
             L.arr[j - 1] = L.arr[j];
         }
         length--;
     }
}
//返回为x的位序值
void List:: Locate(List& L,DataType x)
{
    int j = 0;
    for (j = 0; j < length; j++)
    {
        if (arr[j]==x)
        {
            cout << j + 1;
        }
        else
        {
            cout << "x不存在于该链表!" << endl;
        }
    }
}
//返回第i个位置对应的值
DataType List::Get(List& L,int i)
{
    if (i<0 && i>length)
    {
        cout << "i是错误的位置!" << endl;
        return 0;
    }
    else return L.arr[i - 1];
}
void List::Length(List& L)
{
    cout<< L.length;
}
void List::printList(List& L)
{
    for (int i = 0; i <L.length; i++)
    {
        cout << L.arr[i]<<" ";
    }
}
int main()
{
    List L;
    L.CreateList(L,6);
    L.printList(L);
    L.InitList(L);
    L.Insert(L,3,5);
    L.printList(L);
    L.Get(L,4);
    L.Length(L);
    L.Locate(L,6);
    system("pause");
    return 0;
}

img

这个问题如何解决?感谢感谢!

  • 写回答

1条回答 默认 最新

  • CSDN专家-link 2021-11-07 18:50
    关注

    为什麽要这么写代码呢?
    List是个类啊,定义成L后,直接L.CreateList()就可以创建类了啊,干嘛L的函数调用传入自己作为参数呢
    Insert函数中,else if ((i<0&&i>length+1))的判断条件应该是 (i<0 || i>length + 1)
    另外124行为什麽加一句InitList(L)呢?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月15日
  • 已采纳回答 11月7日
  • 创建了问题 11月7日

悬赏问题

  • ¥15 写uniapp时遇到的问题
  • ¥15 vs 2008 安装遇到问题
  • ¥15 matlab有限元法求解梁带有若干弹簧质量系统的固有频率
  • ¥15 找一个网络防御专家,外包的
  • ¥100 能不能让两张不同的图片md5值一样,(有尝)
  • ¥15 informer代码训练自己的数据集,改参数怎么改
  • ¥15 请看一下,学校实验要求,我需要具体代码
  • ¥50 pc微信3.6.0.18不能登陆 有偿解决问题
  • ¥20 MATLAB绘制两隐函数曲面的交线
  • ¥15 求TYPCE母转母转接头24PIN线路板图