m0_65112842 2022-09-14 15:57 采纳率: 93.8%
浏览 59
已结题

C++运行后输入指令直接结束程序

C++程序运行时输入1直接结束程序了,没有执行程序,这是为什么?


```c++
#include <iostream>
#include<fstream>
#include <iomanip>
#include<algorithm>
using namespace std;
#define MAXSIZE 1000;
typedef struct {
    int num;
    string name;
    double price;
}Book;
typedef struct
{
    Book *elem;
    int length;
}SqList;
SqList L;

class Library
{
public:
    void read();
    void print();
    void add();
    void delet();
    void reset();
    void search();
    void sort();
    void newsort();
};

void Library::read()         //将文件中的数据逐条读入顺序表book中 
{
    int i = 0;
    ifstream inFile("book.txt");
    while (!inFile.eof()) {
        inFile >> L.elem[i].num >> L.elem[i].name >> L.elem[i].price;
        i++;
    }
    inFile.close();            
    cout << "读取完毕!" << endl;
}


void Library::print()//打印所有图书信息
{
    for (int i = 0; i < sizeof(L.elem); i++)
    {
        cout << L.elem[i].num << L.elem[i].name << L.elem[i].price;
    }
    cout << "--------------------------" << endl;
}

void Library::add()//插入图书信息
{
    string xname;
    int xnum;
    double xprice;
    int n;
    cout << "请依次输入插入位置、书号、书名、价格" << endl;
    cin >> n >> xnum >> xname >> xprice;
    for (int i = 0; i < sizeof(L.elem); i++)
    {
        if (n == i + 1)
        {
            for (int i = n; i < sizeof(L.elem); i++)
            {
                L.elem[i + 1].num = L.elem[i].num;
                L.elem[i + 1].name = L.elem[i].name;
                L.elem[i + 1].price = L.elem[i].price;
            }
            L.elem[i + 1].num = xnum;
            L.elem[i + 1].name = xname;
            L.elem[i + 1].price = xprice;

        }
    }
}

void Library::delet()//删除图书
{
    cout << "请输入要删除的图书号";
        int n;
    cin >> n;
    for (int i = 0; i < sizeof(L.elem); i++)
    {
        if (L.elem[i].num == n)
        {
            for (int j = i; j < sizeof(L.elem); j++)
            {
                L.elem[j].num = L.elem[j + 1].num;
                L.elem[j].name = L.elem[j + 1].name;
                L.elem[j].price = L.elem[j + 1].price;
            }
            
        }
    }
}

void Library::reset()//价格更新
{
    cout << "价格更新" << endl;
    for (int i = 0; i < sizeof(L.elem); i++)
    {
        if (L.elem[i].price < 45)
        {
            L.elem[i].price = L.elem[i].price * 1.2;
        }
        if (L.elem[i].price > 45)
        {
            L.elem[i].price = L.elem[i].price * 1.1;
        }
    }
    print();
}

void Library::search()//图书查找
{
    cout << "按位置查找请按1,按书名查找请按2";
    int temp;
    cin >> temp;
    if(temp==2)
    {
    cout << "请输入要查找图书的名字:" << endl;
    string n;
    cin >> n;
    int a = 0;
    bool b = 1;
    for (int i = 0; i < sizeof(L.elem); i++)
        if (L.elem[i].name == n)
        {
            a++;
            b = 0;
            cout << L.elem[i].num << L.elem[i].name << L.elem[i].price;
        }
    cout << "找到了" << a << "本目标书籍" << endl;
    if (b) cout << "抱歉,没有找到目标书籍!" << endl;
    }
    if (temp == 1)
    {
        cout << "请输入要查找图书的位置:" << endl;
        int n;
        cin >> n;
        int a = 0;
        bool b = 1;
        for (int i = 0; i < sizeof(L.elem); i++)
            if (L.elem[i].num == n)
            {
                a++;
                b = 0;
                cout << L.elem[i].num << L.elem[i].name << L.elem[i].price;
            }
        cout << "找到了" << a << "本目标书籍" << endl;
        if (b) cout << "抱歉,没有找到目标书籍!" << endl;
    }
}
void Library::sort()//按价格升序排序
{
    for (int i = 0; i < sizeof(L.elem); i++)
    {
        if (L.elem[i + 1].price > L.elem[i].price)
        {
            L.elem[i].price = L.elem[i + 1].price;
        }
    }
}
void Library::newsort()
{
    ofstream fout;
    fout.open("book-newsort.txt");
    for (int i = 0; i < sizeof(L.elem); i++)
    {
        fout << L.elem[i].name << L.elem[i].num << L.elem[i].price;
    }
}
int main()
{
    Library test;
    int flag = 1;
    while (flag)
    {
        cout << "请输入对应的序号:" << endl;
        cout << "1.读取图书信息" << endl;
        cout << "2.浏览图书信息" << endl;
        cout << "3.统计图书个数" << endl;
        cout << "4.添加图书信息" << endl;
        cout << "5.删除图书信息" << endl;
        cout << "6.图书查找" << endl;
        cout << "7.图书价格更新" << endl;
        cout << "8.图书价格排序" << endl;
        cout << "9.逆序存储" << endl;
        cout << "10.退出程序" << endl;
        cin >> flag;

        if (flag == 1)
        {
            cout << endl;
            test.read();
            cout << endl;
        }

        if (flag == 2)
        {
            cout << endl;
            test.print();
            cout << endl;
        }

        if (flag == 3)
        {
            cout << endl;
            cout << sizeof(L.elem)-1;
            cout << endl;
        }

        if (flag == 4)
        {
            test.add();
        }

        if (flag == 5)
        {
            test.delet();
        }

        if (flag == 6)
        {
            test.search();
        }

        if (flag == 7)
        {
            cout << endl;
            test.reset();
            cout << endl;
        }

        if (flag == 8)
        {
            cout << endl;
            test.sort();
            test.print();
            cout << endl;
        }

        if (flag == 9)
        {
            test.newsort();
        }

        if (flag == 10)
        {
            exit(0);
        }
    }
    return 0;
}

```

  • 写回答

1条回答 默认 最新

  • 快乐鹦鹉 2022-09-14 16:05
    关注

    inFile >> L.elem[i].num >> L.elem[i].name >> L.elem[i].price;
    这里L.elem只是一个指针,还没有分配空间,自然程序会崩溃了
    第8行 #define MAXSIZE 1000; 后面的分号一定要删除!
    给类加一个构造函数
    Library::Library()
    {
    L->elem = new Book[MAXSIZE];
    L->length = 0;
    }

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

报告相同问题?

问题事件

  • 系统已结题 9月22日
  • 已采纳回答 9月14日
  • 创建了问题 9月14日

悬赏问题

  • ¥15 netty整合springboot之后自动重连失效
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击