Like清枫晓月 2021-11-24 00:05 采纳率: 100%
浏览 42
已结题

用vector存放class类型数据,在文件读取时应该是发生了死循环。导致程序一直运行不出来。

main函数中会首先创建一个类对象,在运行代码时,先执行构造函数,读文件操作在构造函数里。运行时就弹出黑窗,然后内存一直增加。
将文件相关的代码注释掉,程序正常运行。不知道读文件代码哪里出了问题
构造函数的读文件代码如下:

BookManage::BookManage()
{
    ifstream ifs;
    ifs.open(FileName, ios::in);
    
    //文件不存在
    if (!ifs.is_open())
    {
        Book_Num = 0;            //初始化书籍种类数量为0
        ifs.close();
        return;            //如果文件不存在直接退出,
    }
    
    //文件数据为空
    char a;
    ifs >> a;
    if (ifs.eof())
    {
        Book_Num = 0;
        ifs.close();
        return;
    }
    
    //文件存在且数据不为空
    Book_Num = get_bookNum();        //更新书籍种类数量
    string name;
    string isbn;
    string number;
    string writer;
    string press;
    string publish_time;
    int publish_number;
    double price;
    int amount;
    for(int i=0;i<Book_Num;i++)
    {
        ifs >> name  >> isbn  >> number  >> writer >> press  >> publish_time  >> publish_number >> price >> amount;
        BookManage b;
        b.Name = name;
        b.ISBN = isbn;
        b.Number = number;
        b.Writer = writer;
        b.Press = press;
        b.Publish_Time = publish_time;
        b.Publish_Number = publish_number;
        b.Price = price;
        b.Amount = amount;
        book.push_back(b);
    }
    ifs.close();
}

文件中的数据:

img

运行时:

img

  • 写回答

1条回答 默认 最新

  • 关注

    在for循环中,判断是否读取失败
    if(ifs.fail()) break;
    另外,你读取数据的时候,每一行最后的换行符也需要用一个char来读取一下,否则会影响后面数据的读取。

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

报告相同问题?

问题事件

  • 系统已结题 12月2日
  • 已采纳回答 11月24日
  • 创建了问题 11月24日

悬赏问题

  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题
  • ¥20 yolov5自定义Prune报错,如何解决?
  • ¥15 电磁场的matlab仿真
  • ¥15 mars2d在vue3中的引入问题
  • ¥50 h5唤醒支付宝并跳转至向小荷包转账界面
  • ¥15 算法题:数的划分,用记忆化DFS做WA求调
  • ¥15 chatglm-6b应用到django项目中,模型加载失败
  • ¥15 CreateBitmapFromWicBitmap内存释放问题。
  • ¥30 win c++ socket
  • ¥15 C# datagridview 栏位进度