【发布时间】:2015-08-10 20:37:35
【问题描述】:
程序运行良好,直到它到达 stoi 函数,然后程序中断并给我这个错误“Microsoft C++ exception: std::invalid_argument at memory location 0x0030EE7C”。我看过关于使用 stoi 的教程,但我不确定我做错了什么。平面文件如下所示:
Organic
7
description
light
4
description
menthol
5
description.
每个单词或数字换行。
struct ProdDescriptor
{
string name;
string price;
string descript;
};
void getProds() // reads products off of the flat file
{
int array = 3;
ProdDescriptor x[3];
ifstream ItemRead(FlatFileName); // object of the flat file
string temp;
if (ItemRead.is_open()) // opens flat file and reads
{
for (int i = 0; i < array; i++)
{
ProdSpecPrice[i] = 0; // initialize
getline(ItemRead, x[i].name);
getline(ItemRead, x[i].price);
getline(ItemRead, x[i].descript);
temp = x[i].price;
ProdSpecPrice[i] = stoi(temp);
ProdSpecName[i] = x[i].name;
ProdSpecDescription[i] = x[i].descript;
}
【问题讨论】:
-
拨打
stoi()时temp的实际内容是什么。请您在此处展示您的调试观察结果! -
是的,您需要检查
temp的值。stoi将抛出invalid_argumentif no conversion could be performed。getline是否删除\n?我想是的.. 但是由于您使用的是 Windows(我在这里做假设),我不确定getline是否删除了\r。 -
@πάντα ῥεῖ 数字 7。
-
@RIDDLEisVoltron 你在 Windows 上吗?您的文件是否使用 CRLF(或者您不确定)? temp (
temp.length()) 的大小是否等于 2 但应该是 1 ?如果您对这些问题的回答正确,请查看this thread。 -
是的,Windows 7、64 位、Visual Studios 2013。我正在阅读 .txt 文件。我没有给 temp 指定长度,有必要吗?
标签: c++