c++ - 将文本文件中的数据存储在结构数组 C++ 中

标签 c++ arrays structure fstream

我正在尝试将文本文件中的数据读入结构数组。 for 循环的第一次迭代读取并正确显示所有内容,直到达到 bool 值,此后的每次迭代都不会按预期显示。最后的 bool 值是否导致整个文件的其余部分被错误读取?或者可能是 getline 引起的问题?

int main()
{
    groceryProduct inventoryDatabase[25];
    ifstream fin("inventory.txt");
    if (!fin)
    {
        cout << "File could not be located.";
    }
    string itemName;

    for (int index = 0; index < 25; index++)
    {
        getline(fin, inventoryDatabase[index].itemName, '\n');
        fin >> inventoryDatabase[index].itemNumber;
        fin >> inventoryDatabase[index].itemPrice;
        fin >> inventoryDatabase[index].membershipPrice;
        fin >> inventoryDatabase[index].payByWeight;

        cout << inventoryDatabase[index].itemName << endl;
        cout << inventoryDatabase[index].itemNumber << endl;
        cout << inventoryDatabase[index].itemPrice << endl;
        cout << inventoryDatabase[index].membershipPrice << endl;
        cout << inventoryDatabase[index].payByWeight << endl;
    }
    return 0;
};

结构:

struct groceryProduct
{
    double itemPrice;
    double membershipPrice;
    double itemWeight;
    int itemQuantity;
    string itemNumber;
    string itemName;
    bool payByWeight;
};

输出:

Apple
P0000
0.85
0.8
204 (expected output of 'false' instead of 204)

第一次迭代后循环每次迭代的输出:

-9.25596e+61
-9.25596e+61
204

谢谢,如果您需要更多信息,请告诉我。

文件:

Apple
P0000
.85
.80
false
Orange
P0001
.95
.85
false
Lemon
P0002
.65
.60
false

最佳答案

你需要告诉你的流 bool 值是文本

fin >> boolalpha >> inventoryDatabase[index].payByWeight

您在第一个 bool 输入后看到垃圾数据,因为在流中设置了故障位,并且在重置之前不会有进一步的输入。这会导致您的数组数据保持未初始化状态。

关于c++ - 将文本文件中的数据存储在结构数组 C++ 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33092239/

相关文章:

c# 如何将 Json 数据检索到数组中

c - 为什么 scanf 不接受元素进入这个 C 结构?

C++,从 `int*' 到 `int' 的错误无效转换

c++ - 预编译头对mfc有多大影响?

java - 如何使用ndk在eclipse中导入和编辑C++代码?

C++数组声明问题

arrays - 与等级无关的代码 : array and domain from list of sizes

c++ - 具有重叠 I/O 的非阻塞套接字

architecture - Julia:使用许多不同但相关的算法选择来构建代码

java - 如何将指针引用地址传递给 JNA 中的结构