首页 > 解决方案 > 在抛出 'std::out_of_range' 的实例后调用终止 what(): basic_string::at: __n (which is 0) >= this->size() (which is 0)

问题描述

我正在尝试读取酒店房间预订的 .csv 文件。对象已正确创建,但在读入完成后出现超出范围错误。

我曾尝试在各个地方弄乱 inFS.ignore() ,但它要么会单独弄乱一些/所有输入,要么会抛出相同的错误。我唯一能得到所有正确值的时候是我完全省略它(如上所示),但后来我又得到了这个错误。我很困惑,因为我使用 push_back 作为向量,所以这不应该是范围问题。此外,我有 while 循环运行 while !eof() 所以我也不认为它是文件问题

这是我创建的打开和读取文件的方法

void openFile(string fileName, Hotel h){
ifstream inFS;
inFS.open(fileName);
if (!inFS.is_open()){       
    cout << "File error;" << endl;
    return;
}
else {
    string date;
    string type;
    string name;
    string email;
    string op1;
    string op2;
    getline(inFS, date);
    while(!inFS.eof()){
        getline(inFS, type, ',');
        getline(inFS, name, ',');
        getline(inFS, email, ',');
        getline(inFS, op1, ',');
        getline(inFS, op2, ',');
        char o1 = op1.at(0);
        char o2 = op2.at(0);

        char t1 = type.at(0);                   
        if(t1 == BUNGALOW){
            Bungalow bRoom;
            bRoom.setRoomType(type);
            bRoom.setCustomerName(name);
            bRoom.setCustomerEmail(email);
            bRoom.setViewChoice(o1);
            bRoom.setHoneymoonPackage(o2);
            Room* pointer = &bRoom;
            h.addRoom(pointer);
            cout << "Bungalow created" << endl;
        }
        else if(t1 == KING){
            DeluxeKing kRoom;
            kRoom.setRoomType(type);
            kRoom.setCustomerName(name);
            kRoom.setCustomerEmail(email);
            kRoom.setConciergeFloor(o1);
            kRoom.setParkingGarageAccess(o2);
            Room* kPointer = &kRoom;
            h.addRoom(kPointer);
            cout << "Deluxe King created" << endl;
        }
        else if (t1 == QUEEN){
            StandardQueen qRoom;
            qRoom.setRoomType(type);
            qRoom.setCustomerName(name);
            qRoom.setCustomerEmail(email);
            qRoom.setLargerRoom(o1);
            qRoom.setParkingGarageAccess(o2);
            Room* qPointer = &qRoom;
            h.addRoom(qPointer);
            cout << "Standard King created" << endl;
        }
        else {
            cout << "Received: " << t1 << endl;
        }


    }           


}

这是我正在使用的 csv 文件:

12/01/20
B01,John Smith,jsmith@jsnet.com,B,H
B04,Alan Wade,aw@aw.net,G,X
DK03,Susan Slate,susie@slate.com,Y,Y
DK07,Tim Tolee,tolee@tim.net,N,Y
Q09,Nicole Thomas,nthom@xxx.com,Y,Y
Q10,Brown Dole,drdo@dole.net,N,Y

标签: c++pointersvectorfstreamoutofrangeexception

解决方案


推荐阅读