【发布时间】:2017-04-26 22:04:58
【问题描述】:
我正在尝试将库存系统读入结构数组。当我调用该函数并到达第一行时,我尝试将数据写入数组,出现错误:
Lab 09.exe 中 0x777CA932 处未处理的异常:Microsoft C++ 异常:内存位置 0x00F3DC68 处的 std::out_of_range。
结构如下:
struct inventory {
int record;
string toolname;
int quantity;
double cost;
};
数组声明:
inventory unsortedArray[100];
这是函数(假设文件的第一行是 83 #Electric Sander# 7 57.00):
void fillArray(inventory unsortedArray[]) {
ifstream file;
string line;
string delim = "#";
stringstream ss;
file.open("records.txt");
int i = 0;
while (!file.eof()) {
getline(file, line);
unsigned first = line.find_first_of(delim);
unsigned last = line.find_last_of(delim);
unsortedArray[i].toolname = line.substr(first, (last - first) + 1);
line.erase(first, (last - first) + 1);
ss << line;
ss >> unsortedArray[i].record;
ss >> unsortedArray[i].quantity;
ss >> unsortedArray[i].cost;
i++;
}
file.close();
}
【问题讨论】:
-
我建议您使用
std::string::size_type而不是unsigned为您的first和last。您还需要检查std::string::npos的返回值。 -
你应该阅读
std::getline(file, line, '#')。 -
Visual Studio 中止?你的意思是你的程序中止了吗?