c++ - 在抛出 '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
解决方案
推荐阅读
- css - @font-face 仅当字体安装在本地机器上时才有效
- python - 从文本中提取值并使用 python 转换为 JSON
- javascript - 在网页输入框中自动填充值的脚本
- reactjs - 测试依赖项的安全漏洞会威胁到我在生产中的应用吗?
- elasticsearch - 嵌套字段中的嵌套聚合?
- c# - 如何使用 Xamarin 在 xaml 中创建自定义字体大小,以便您可以根据设备更改字体大小?
- asp.net-core - 如何使用 NavLinkMatch.All 使 NavLink 处于活动状态,最后带有井号
- sap-fiori - 将字段组添加到 Fiori 元素对象页面
- c - C Syslog API - 如何覆盖 _PATH_LOG
- ruby-on-rails - ActiveAdmin 过滤器日期格式